文章目录
(1). 基本数据类型
- 数据类型可以理解为固定内存大小的别名,创建变量的模子
- 变量本质
- 范例
(2). 有符号与无符号
-
有符号
-
数据类型的最高位用于表示数据的符号
-
最高位为1,表明这个数是负数
-
最高位为0,表明这个数为正数
-
-
在计算机内部用补码表示有符号数
-
正数的补码为正数本身
-
负数的补码为负数的绝对值各位取反后加1
-
-
-
无符号
-
在计算机内部用原码表示无符号数
-
无符号数默认为正数
-
无符号数没有符号位
-
-
对于固定长度的无符号数
-
MAX_VALUE + 1 -> MIN_VALUE
-
MIN_VALUE - 1 -> MAX_VALUE
-
-
-
signed 和 unsigned
-
C语言中默认是有符号类型
-
unsigned关键字声明变量为无符号类型
-
C语言中只有整数类型能够声明unsigned变量
-
-
范例:
-
当无符号 ( unsigned ) 遇到有符号 ( signed )
当无符号数与有符号数混合计算时,会将有符号数转换为无符号数后再进行计算,结果为无符号数
-
错误地使用了 unsigned
-
(3). 浮点数
-
内存中的浮点数
浮点数在内存的存储方式为:符号位,指数,尾数
类型 符号位 指数 尾数 float 1位(第31位) 8位(第23-30位) 23位(第0-22位) double 1位(第63位) 11位(第52-62位) 52位(第0-51位) float 和 double 类型的数据在计算机内部的表示法是相同的,但由于所占存储空间不同,其分别能够表示的数值范围和精度不同。
-
浮点数存储示例
-
浮点数的转换步骤:
-
将浮点数转换成二进制
-
用科学计数法表示二进制浮点数
-
计算指数偏移后的值
注意:
计算指数时需要加上偏移量,而偏移量的值与类型相关.示例:对于指数 6,偏移后的值如下:
float: 127 + 6 -> 133
double: 1023 + 6 -> 1029
-
-
10进制浮点数的内存表示
实数 8.25 在内存中 float 表示:
-
8.25 转换成二进制表示: 1000.01 -> 1.00001 * (2^3)
符号位: 0
指数: 127 + 3 -> 130 -> 10000010
小数:00001
-
内存中的8.25的float表示:
0 10000010 00001000000000000000000 -> 0x41040000
-
-
-
浮点类型的秘密
-
int类型范围 [-2^31, 2^31 - 1],float类型范围 [-3.4 * (10^38), 3.4 * (10^38)]
-
float能表示的具体数字的个数与int相同
-
float可表示的数字之间不是连续的,存在间隙
-
float只是一种近似的表示法,不能作为精确数使用
-
由于内存表示法相对复杂,float的运算速度比int慢的多
注意:
double 与 float 具有相同的内存表示法,因此 double 也是不精确的。由于 doubl 占用的内存较多,所能表示的精度比 float 高。 -
(4). 属性关键字(auto、register、static)
C 语言中的变量可以有自己的属性,在定义变量时可以加上“属性”关键字,用于指明变量具有有特殊意义。
-
auto
C 语言中局部变量的默认属性,编译器默认