嵌入式Linux(五)—嵌入式C语言(运算符2)

2023-11-08

目录

逻辑结构

类型修饰符

auto

register 

补充:(内存和寄存器的关系?)

Static(静态)

 Extern(外部申明)

Const

Volatile

运算符

算数运算操作

逻辑运算

 || 或     &&与

?: 

位运算

移位

&,|

^,~

赋值运算

内存访问 


逻辑结构

if(条件表达式)

xxx(功能)

else 

yyy(功能)

多可能性分支:switch(整型数字)

case 1 :

break;

case 2 :

break;

循环:for(次数)   while(条件)   do(while)

goto:同一个函数中的跳转

类型修饰符

相较于数据类型关键字限定的是资源土地的大小

类型修饰符修饰的是资源土地的位置

auto

最日常使用的类型

定义的时候什么都不写就默认auto,由系统默认分配(在内存中)

分配的区域如果在{}中,即属于栈空间

register 

限制变量定义在寄存器上的修饰符

当数据过于被频繁使用可以放在寄存器中

如果寄存器不足

系统还是会把a放到内存中去(&无法对寄存器中的数据取地址) 

补充:(内存和寄存器的关系?)

 

左侧是在cpu中的寄存器,cpu执行操作时直接和寄存器通信是很快的

而右侧是内存,cpu和内存中的资源进行通信相对来说就比较慢

所以寄存器的大小一定程度上就体现了Cpu的执行效率

因此在cpu售卖时提到的XXX缓存即代表其寄存器中可以存储数据的大小 

Static(静态)

1.对于函数内部的变量

int fun()
{
    static int a;
}

2.对于函数外部的变量

static int a;
int fun()
{
    
}

3.修饰函数

static int fun();

 Extern(外部申明)

Const

常量定义=>只能做到是一个只读的变量,通过某些方法还是可以改变它

Volatile

告知编译器编译方法的关键字,不优化编译

底层编程中比较常用

运算符

算数运算操作

加减乘除不再叙述

Tips:处理器中其实是没有乘除操作的,乘法除法往往要经过多个周期,甚至是通过软件的模拟方法实现乘除法 

%:求模,求余数

 由于任意一个变量和m求模

得到的范围就是【0——m-1】在取范围时可以使用

  • 可以被用为求某进制下该数的个位上的数字
  • 循环下标(在循环数据结构中)

逻辑运算

用1和0来表示真和假

 || 或     &&与

这里有一个优先级的关系

其导致的是

A || B   不等于    B || A

其原因为 如果编译器已经判断A是真的,那编译器接下来就会直接判断A||B表达式为真

B中包含的语句不会再被执行

所以两者并不能画上等号,执行关系优先级是不相同的

重点在于区别位运算中取反的操作

int a=0x0

! 整体取反=》31个0加1(4个字节)

~  逐位取反=》32个全转成1  (0xffff)

?: 

就是if else 

位运算

移位

左移<<    右移>>

我们可以把操作看成乘法

由于位运算都在二进制下

因此左移就可以看成乘2(10进制)操作

0001  左移一位   0010

 如果是数字的移位呢?

计算机中对负数数据的存储(8bit)是其)(符号位不动其他取反)反码+1

也就是说-1在计算机中的展示就是1111 1111

-2的展示就是1111 1110 所以左移乘2的操作依旧适用

右移:>>

此处有符号数和无符号数就有了差别

        int a

有符号数中,如果是正数就补1,负数就补0

        unsigned

无符号数默认补0

&,|

对应数字电路的与,或

&:可以起到屏蔽作用,取出作用(可以拿来设计低电平:clr)

int a=0x1234;
a & 0xff00

//这样的情况下低8bit就被屏蔽了
//高8bit就被取出了

|:可以起保留作用

A|1=1;设置高电平的一种方法 (设计高电平:set)

设置一个资源的bit5为高电平,其他位不改变
int a;
a=(a|(0x1<<5));

清除第五位
int a;
a=a & ~(0x1<<5)

设置4 5 6bit设置为101(?)

为什么不用右移:右移没办法准确知道当前操作系统位数(移植)=> 用取反肯定不会错

^,~

在数学算法中应用的比较多,几乎不用来处理逻辑

做两个数互换

(1)另创数备份一次

(2) a=a^b;
      b=a^b;
      a=a^b;

 取反:逐位取反(和!的真和假有本质区别)

赋值运算

|=  &= 都可以用,实现自更新

内存访问 

():限制符—>限制运算次序

():函数访问fun()

  [ ] :数组->内存访问的ID

 { }:函数体的限制符号 

 ->:地址访问

.:变量访问 

&p:就是取地址

*p:就是指针 

(前提是后面跟的是变量) 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式Linux(五)—嵌入式C语言(运算符2) 的相关文章

  • 使用 inotify 的正确方法是什么?

    我想使用inotifyLinux 上的机制 我希望我的应用程序知道文件何时aaa被改变了 您能给我提供一个如何做到这一点的示例吗 文档 来自监视文件系统活动 inotify https developer ibm com tutorials
  • 如何将后台作业的输出分配给 bash 变量?

    我想在 bash 中运行后台作业并将其结果分配给一个变量 我不喜欢使用临时文件 并且希望同时运行多个类似的后台任务 root root var echo hello world root root echo var hello world
  • C - 为什么我无法映射较小(256UL 或更小)的内存?

    请告诉我 为什么我的简单应用程序无法映射较小的内存 而且 为什么有这样一个特定的边界 257UL define MAP SIZE 256UL or below fail define MAP SIZE 257UL ok include
  • 从c调用汇编函数

    我试图从 c 调用汇编函数 但我不断收到错误 text globl integrate type integrate function integrate push ebp mov esp ebp mov 0 edi start loop
  • 找出 Linux 上的默认语言

    有没有办法从C语言中找出Linux系统的默认语言 有 POSIX API 可以实现这个功能吗 例如 我想要一个人类可读格式的字符串 即德语系统上的 German 或 Deutsch 法语系统上的 French 或 Francais 等 有类
  • Linux“屏幕”的 Windows 等效项还是其他替代方案?

    我正在寻找一种在 Windows 环境中控制程序的方法 我希望它与 Linux 软件有点相似 screen 我搜索的原因是我需要使用标识符启动一个程序 在 Windows 上 这样我以后就能够关闭该特定程序 而无需关闭其他任何程序 即使实际
  • 在 Linux 上创建线程与进程的开销

    我试图回答在 python 中创建线程与进程有多少开销的问题 我修改了类似问题的代码 该问题基本上运行一个带有两个线程的函数 然后运行带有两个进程的相同函数并报告时间 import time sys NUM RANGE 100000000
  • 运行此处编译的 C 程序会导致在另一台服务器上找不到 GLIBC 库错误 - 是我的错还是他们的错?

    此处编译的 C 程序在我们的 Ubuntu 服务器上运行良好 但是当其他人尝试在他们的特定 Linux 服务器上运行它时 他们会收到以下错误 myprog install lib tls libc so 6 version GLIBC 2
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • Python将文件从Linux复制到WIndows

    我正在构建一个网站 该网站有一个表单 可以捕获用户数据并在用户数据上运行一些cgi cgi 的第一步是需要将文件从 Linux Web 服务器复制到 Windows 计算机 服务器将使用 Active Directory 角色帐户作为复制凭
  • 在 Linux 控制台中返回一行?

    我知道我可以返回该行并用以下内容覆盖其内容 r 现在我怎样才能进入上一行来改变它呢 或者有没有办法打印到控制台窗口中的特定光标位置 我的目标是使用 PHP 创建一些自刷新的多行控制台应用程序 Use ANSI 转义码 http en wik
  • 为什么docker容器提示“权限被拒绝”?

    我使用以下命令来运行 docker 容器 并从主机映射目录 root database 到容器 tmp install database docker run it name oracle install v root database t
  • 完整的 C++ i18n gettext()“hello world”示例

    我正在寻找完整的 i18ngettext 你好世界的例子 我已经开始了一个基于的脚本使用 GNU gettext 的本机语言支持教程 https web archive org web 20130330233819 http oriya s
  • Bash - 比较 2 个文件列表及其 md5 校验和

    我有 2 个列表 其中包含带有 md5sum 检查的文件 即使文件相同 列表也具有不同的路径 我想检查每个文件的 md5 和 我们正在讨论数千个文件 这就是为什么我需要脚本来仅显示差异 第一个列表是普通列表 第二个列表是文件的当前状态 我想
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • php_network_getaddresses: getaddrinfo 失败: 名称或服务未知 (0) 连接失败..!

    我正在使用 php 邮件程序功能 但出现以下错误 如何修复它 2016 01 22 06 15 48 SMTP 错误 无法连接到服务器 php network getaddresses getaddrinfo失败 名称或服务未知 0 连接失
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset

随机推荐

  • 基于iframe的HTTP长连接实现

    关于什么是http长连接我不废吐沫了 有专业的解释 http www ibm com developerworks cn web wa lo comet 你可以去看看我们介绍一下在struts下的实现首先写一个test jsp 写一些片段
  • 【100天精通python】Day30:使用python操作数据库_数据库基础入门

    专栏导读 专栏订阅地址 https blog csdn net qq 35831906 category 12375510 html 1 数据库基础知识介绍 1 1 什么是数据库 数据库是一个结构化存储和组织数据的集合 它可以被有效地访问
  • android 网络自动同步时间慢问题

    问题描述 今天测试提了一个网络同步时间慢的bug 网络同步时间原理参考 https blog csdn net yin1031468524 article details 65447849 核心代码在NetworkTimeUpdateSer
  • 【遗传算法】【处理图像类问题】

    文章目录 一 前言 二 问题描述 三 算法介绍 四 其他知识点 Reference 一 前言 近期感兴趣的算法 以前没这么好奇过一个算法 时间没想象的焦虑 认真做一些事情 算法入门篇 二 问题描述 从前 一群扇贝在海岸边悠哉游哉地生活着 它
  • ThinkPHP3.2自带的七牛云配置使用

    利用七牛云私有空间存储文件 第一步 注册七牛云 创建空间 将空间设为私有 需要记下的东西 accessKey secrectKey domain bucket 第二步配置ThinkPHP 在config php添加 UPLOAD SITEI
  • STM32 FreeRTOS 内存问题

    1 STM32L151C8T6 内存 64Kb 的Flash 代码就是烧录在这里面的 16Kb 的RAM 程序跑起来之后的内存 相当于我们高考时发的草稿纸 直接影响程序的运行速度 可以用STM32 CubeMx 软件直接下载数据手册data
  • Calendar 中getActualMaximumd 功能

    String str new SimpleDateFormat yyyy MM dd HH mm ss SSS format new Date Calendar calendar Calendar getInstance Locale CH
  • 使用pytorch训练DCGAN----贰(代码解析)

    使用pytorch训练DCGAN 代码解析 上一篇 使用pytorch训练DCGAN 壹 这里我使用的代码时pytorch官方提供的源码 然后根据DCGAN原论文分板块分析 板块一 导包 from future import print f
  • javaWeb图书管理系统

    javaWeb图书管理系统 1 项目简单介绍 a 项目用到的技术 IDE Intellij IDEA 语言 java html ajax js 数据库 Mysql 数据库可视化 navicat web服务器 Tomcat 框架 mybati
  • C++使用当multiset插入相同的数时 新插入的数在已有数的左边还是右边呢

    答案 在multiset中 元素按照特定的顺序进行排序并存储 当向multiset插入相同的数时 新插入的数将被放置在已有数的右边 multiset允许存储重复的元素 并且保持了元素的顺序 因此 如果已经存在相同的数 新插入的数将被放置在它
  • c++在线编辑器

    c 在线编辑器 Compiler Explorer Coliru Ideone 乱糟糟的不推荐 C Shell CodingGround 可用来美化代码 慢的很 Judge0 IDE Compiler Explorer https godb
  • P1088 [NOIP2004 普及组] 火星人(全排列)

    题目链接 火星人 思路分析 分析题目题意得到 这个题目关于全排列的问题 题目输入N M分别代表对1 N进行全排列 火星人给出的大数就是1 N全排列的一种情况 对全排列的所有情况进行编号 例如下图 例如上图N 3 假设M 2 给出一种全排列序
  • ffmpeg推流收流 1920*1080视频 花屏

    自己用ffmpeg推流 然后再收流 小分辨率没有问题 当分辨率为1920 1080时 出现花屏现象 尤其是码率高时 现象更加明显 尝试各种办法 最后用下面的办法解决 在ffmpeg源码udp c中 define UDP MAX PKT SI
  • Ubuntu22.04配置静态IP-网关-DNS

    要在Ubuntu系统中配置网络 可以通过以下步骤进行操作 1 打开终端 可以使用 Ctrl Alt T 快捷键打开终端 或者从应用程序菜单中找到 终端 2 检查网络接口 输入以下命令检查当前系统中的网络接口列表 ifconfig a 接口列
  • 贝叶斯网络python实战(以泰坦尼克号数据集为例,pgmpy库)

    文章目录 贝叶斯网络简介 贝叶斯推断思路 贝叶斯网络 贝叶斯网络的实现 应用步骤 泰坦尼克数据集背景介绍 模型结构搭建 模型参数构建 贝叶斯估计器 推理 自动设计网络结构 gt 使用结构学习方法 模型保存 先验 练手数据集 Binary C
  • 三大排序算法

    目录 大O和推导过程 冒泡排序 冒泡排序的思路 冒泡排序的实现 冒泡排序的效率 O N 选择排序 选择排序的思路 选择排序实现 选择排序的效率 O N 插入排序 插入排序的思路 插入排序的实现 插入排序的效率 O N 大O和推导过程 公司规
  • 2023美赛C题:预测Wordle结果-思路详解及参考代码

    一 题目解析 总体来看与去年的C题比较相似 唯一一道有数据 不需要自己额外找 的题目 选题人估计也最多 本质是数据分析题目 需要建立预测模型 分类模型 特征挖掘等 相对来说出思路比较简单 想出彩比较难 所以在分析建模时一定要多维度思考 不然
  • spring三级缓存解决循环依赖

    一 循环依赖 简单说就是 A类中有B属性 B类中有A属性 创建A对象时发现有B属性 就开始创建B对象 此时时又发现B对象中有A属性 又要创建A对象 产生循环依赖现象 示例图 二 Spring解决循环依赖 使用缓存解决循环依赖的流程图 spr
  • 计算机高级应用大赛,理工学院成功开展第三届计算机应用技能竞赛之高级OFFCIE应用大赛...

    为提升学生计算机办公软件应用技能 进一步激发学生的学习兴趣 11月21日下午 理工学院第三届计算机应用技能竞赛之高级OFFCIE应用大赛在A5401 A5403 A5411三个机房成功举行 323名学生报名参加此次竞赛 竞赛分为Word E
  • 嵌入式Linux(五)—嵌入式C语言(运算符2)

    目录 逻辑结构 类型修饰符 auto register 补充 内存和寄存器的关系 Static 静态 Extern 外部申明 Const Volatile 运算符 算数运算操作 逻辑运算 或 与 位运算 移位 赋值运算 内存访问 逻辑结构