一、数据类型
1.基本数据类型
char | 字符数据类型 |
---|
short | 短整型 | int | 整型 | long | 长整型 | long long | 更长整型 | float | 单精度浮点数 | double | 双精度浮点数 |
注:C语言中没有专门的字符串类型
2.类型的基本归类
有符号(signed):最高位是0,表示是正数;最高位是1,表示是负数。 无符号(unsigned):最高位也是数据位。
有符号(signed) | 无符号(unsigned) |
---|
char(-128~127) | unsigned char (0~255) | short(signed short) | unsigned short | int(signed int) | unsigned int | long(signed long) | unsigned long |
示例:
unsigned int a = -10;
int b = -10;
printf("a = %u\n", a);
printf("b = %u\n", b);
printf("a = %d\n", a);
二、整形在内存中的存储
1.原码、反码、补码
正数的反码和补码都与原码相同; 负数的反码为原码符号位不变其他位取反,补码为反码+1。
| 正数(10) | 负数(-10) |
---|
原码 | 00000000 00000000 00000000 00001010 | 10000000 00000000 00000000 00001010 | 反码 | 00000000 00000000 00000000 00001010 | 11111111 11111111 11111111 11110101 | 补码 | 00000000 00000000 00000000 00001010 | 11111111 11111111 11111111 11110110 |
上表格示例(int):有4个字节=32位,整形在计算机中是以补码的形式进行存储的。
2.大小端字节序存储
(1)小端字节序存储:把一个数据的低位字节处的数据存放在低地址处;把高位字节处于的数据存放在高地址位。
(2)大端字节序存储:把一个数据的高位字节处的数据存放在低地址处;把低位字节处于的数据存放在高地址位。
例:下图是小端存储的。 判断系统大小端(示例):
int check_sys(char* p) {
if (*p == 1) {
return 1;
}
else {
return 0;
}
}
int main()
{
int c = 1;
char* p = (char*)&c;
int ret = check_sys(p);
if (ret == 1) {
printf("小端\n");
}
else {
printf("大端\n");
}
return 0;
}
三、浮点型在内存中的存储
根据国际标准IEEE,任意一个二进制浮点数V可以表示成下面的形式: (-1)^S * M * 2^E (-1)^S:表示符号位,当S=0,V为正数;当S=1,V为负数。 M:表示有效数字,大于等于1,小于2。 2^E:表示指数位
示例:
float f = 5.5;
四、练习
示例:
int n = 9;
float* pFloat = (float*)&n;
printf("n=%d\n", n);
printf("*pFloat=%f\n", *pFloat);
*pFloat = 9.0;
printf("n=%d\n", n);
printf("*pFloat=%f\n", pFloat);
|