嵌入式Linux编程 Android软件开发
2015年(16)
分类: C/C++
2015-04-29 20:34:00
C语言回顾
1.数据类型
<1>基本类型
整型 : 小整型[char],短整型[short],整型[int],长整型[long]
浮点型 : 单精度[float],双精度[double]
<2>构造类型
数组 / 结构体 / 联合体/ 枚举
2.运算符
自增/自减 : ++ , --
算术运算符: +, - , * , / ,%
逻辑运算符: >,<,>=,<=,==,!= , &&[且的关系],|| [或的关系]
位运算符 : & , | , >> , << ,!
3.数组/指针/函数
四 C语言的数据类型
用途:定义变量
数据类型 变量名;
数据类型 变量名=值;
思考:为什么定义变量?
在C语言中定义变量,会分配内存,分配内存用来存储数据
思考:定义变量的时候,分配的内存的大小?
取决于数据类型,不同数据类型,分配的大小不一样[指针变量比较特殊]
1.基本类型
整型 : 小整型[char],短整型[short],整型[int],长整型[long]
浮点型 : 单精度[float],双精度[double]
<1>小整型[char]
大小:1byte(8bit)
0000 0000 => 0
1111 1111 => 255
有符号char [char] (-128,127)
无符号char [unsigned char] (0 ,255)
如果是一个有符号类型,其最高位为符号位[0:正数 1:负数]
如果是一个无符号类型, 其最高位为数据位,不是符号位
注意:
数据在内存中以补码的形式存放
正数补码 = 正数本身
负数补码 = 对应的正数取反 + 1
-------------------------------------------
char a = 100;
char b = 250;
-------------------------------------------
总结:
正数和负数最终以补码的形式存放,当我们读数据的时候,
如果是一个无符号类型变量,其最高位不当作符号位,直接读取数据
如果是一个有符号类型变量,其最高位当作符号位,最高位为1则为负数[原码 = ~对应正数+ 1]
,其最高位为0,则标示正数,直接读取数据。
练习:
分别给unsigned char /char变量,赋值100,200,300,查看输出的结果
点击(此处)折叠或打开
char b = -128;
unsigned char c = -128;
-128 在内存中的补码:
1000 0000
~ 0111 1111
+ 1
----------------------------
1000 0000
补码的结果对于b而言,最高位为符号位,认为负数 => 原碼 = 111 1111(取反的结果) + 1 = 128 => -128
补码的结果对于c而言,最高位不是符号位,认为正数 => 原碼 1000 0000 => 128
char b = -129;
unsigned c = -129;
最终输出b:127 c:127
<2>短整型[short]
大小:2byte(16bit)
有符号short [short] (-32768,32767)
无符号short [unsigned short] (0 ,65535)
<3>整型[int]
大小:4byte(32bit)
有符号int [int]
无符号int [unsigned int]
<3>长整型[long]
大小:4byte(32bit) [32bit机器] / 8byte [64bit机器]
有符号int [int]
无符号int [unsigned int]
<4>长长整型[long long]
大小:8byte(64bit)
-------------------------------------------------
注意:计算类型大小 sizeof(类型/变量名)
-------------------------------------------------
练习:输出类型大小(char ,short,int,long,long long,float,double)?
点击(此处)折叠或打开