"); //-->
char: 字符类型,占1个字节,8bit位,取值范围为 -128~127(-2^7~2^7-1)。
short: 短整形,2字节,16bit位。
int: 整形,4字节,32bit位。
long: 长整形,4字节,32bit位。
float: 浮点型,4字节,32bit位。
double: 双精度浮点型,8字节,64位
bool: true/false 使用时需包含头文件<stdbool.h>。
1) 最高位是符号位,0表示正数,1表示负数。
2) 如果是正数,正常表示(即原码),如果是负数,先求反码,再求补码(补码为反码加1)即为他的二进制表示。例如char型的1,用二进制表示为00000001;char型的-1用二进制表示为11111111。
-1原码:10000001
-1反码:11111110 (求反码符号位不变)
-1补码:11111111
常量,就是在程序运行过程中值无法被改变;变量,就是在程序运行过程中内部存储的值随时可以被改变。变量是“可读、可写”,而常量,是“只读”的。
整形常量:12、浮点型常量:12.35、实数型常量:1.3e-5、字符型常量:'a'、字符串型常量:"abc"、标识符常量:#define LEN 10。
变量一般存放在内存中:栈区, 静态数据区,全局变量区, 堆区。函数中定义的变量,如果不加特殊修饰,都是保存在栈区,函数调用结束,栈空间被自动释放。
定义变量:
<存储类型> <数据类型> <变量名>
static/auto/... int/char a
例如:static int a;char c;
存储类型:
auto:自动存储类型(一般都省略),申请的变量都保存在栈空间。
register:寄存器型变量,申请的变量保存在寄存器上。速度快,效率高,但不能对其进行取地址操作。
static:静态存储类型,申请的变量保存在静态区,默认初始化为0,初始化语句只执行一次,生存周期为整个程序结束。目的:限制变量的作用域。
extern:外部引用,用于多文件编程。被引用的变量必须是在其他文件中定义过的。
const:只读存储类型,相当于常数。
自动类型转换
将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换,例如:float a = 10;10是int类型的数据,需要先转换成float类型然后再赋值给变量a。
在不同类型的混合运算中,编译器也会自动地转换数据类型,将参与运算的所有数据先转换为同一种类型,然后再进行计算。转换的规则如下:
转换按数据长度增加的方向进行,以保证数值不失真,或者精度不降低。例如,int 和 long 参与运算时,先把 int 类型的数据转成 long 类型后再进行运算。
所有的浮点运算都是以双精度进行的,即使运算中只有 float 类型,也要先转换为 double 类型,才能进行运算。
char 和 short 参与运算时,必须先转换成 int 类型。
强制类型转换
自动类型转换是编译器根据代码自己判断的,有时候我们需要手动的进行数据类型转换,称之为强制类型转换,例如:
(int)(a+b); //将a + b 求得结果的数据类型强制转换为int型。
运算符算术运算符: + - * / % ++ --
关系运算符: 结果只有真或者假:> < == >= <= !=
逻辑运算:&& || !
位运算:& | ~ ^ << >>
赋值运算 : = , +=
条件运算符: 表达式1 ? 表达式2 : 表达式3;
逗号运算:从左到右依次计算,最后一个表达式的值,作为整个表达式的值。
sizeof运算符:测试变量所占空间的大小。sizeof(类型) 或者 sizeof(变量名)
运算符的优先级
特殊运算符>单目运算符>双目运算符>三目运算>赋值运算>逗号运算
以上是老韩关于Linux c基础的总结,如有不足欢迎指点;对Linux c或者Linux驱动感兴趣的朋友可以收藏关注,我会持续更新的,谢谢支持!
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
ARM 开发板使用手册 在三星 S3C2410开发板上烧写linux
Linux系统的DS18B20驱动程序源代码
linux入门精华
uClinux系统分析
Linux中的fork与exec系列函数分析
由于英特尔裁员和公司重组,主要的英特尔 Linux 驱动项目正在消亡
基于ARM的嵌入式Linux系统开发 上
基于ARM的嵌入式Linux系统开发 中
GeForce 590 驱动分支是首个不支持 GTX 9 和 10 系列 GPU 的分支——Linux 版本标志着定义时代显卡的终结
彻底告别486:Linux内核维护者正式移除英特尔486处理器支持
uClinux系统分析
基于ARM-Linux的MiniGUI的仿真与移植
RK3506核心板SDK重磅升级,解锁三核A7实时控制新架构
嵌入式LINUX开发套件常见问题解答
53年后,惠普于1972年推出的总线标准获得了稳定的Linux驱动——通用接口总线拥有惊人的8 MB/s带宽
基于ARM的嵌入式Linux系统开发 下
实时Linux技术:如何在嵌入式LINUX中应用实时特性
Linux 今天 34 岁了
嵌入式Linux优化:加快系统起动和应用起动的过程
基于Linux平台的温度传感器DS18B20驱动程序设计
Linux系统下USB摄像头驱动开发
FFT公司9200的板子的资料
U-BOOT 与 MontaVista Linux 的移植
[转帖]NeuLinux嵌入式Linux开发平台
[链接]Firefox_ 重新发现网络
Linux就AI生成代码定下规则:允许Copilot类工具、拒绝劣质AI代码,错误由人类负责
Linus Torvalds 称谷歌工程师提交的 RISC-V 代码为“垃圾”,并表示它“让世界变得更糟糕”
Kontron与Congatec合作开发安全的嵌入式Linux平台
Linux内核源代码的阅读和工具介绍(aqian转)
一种嵌入式ARM-Linux GPS智能终端设计