目录:
第一点:数据类型的归类 第二点:1.大小短字节数据存储问题;2.如何判断自己的机器是大端还是小端? 第三点:unsigned与signed的区别;画出象限坐标表示 第四点:题型讲解;123; 第五点:浮点数在计算机中的存储;
1.数据类型:
| char | 1字节 | 字符型 |
|---|---|---|
| short | 2字节 | 短整型 |
| int | 4字节 | 整型 |
| long | 4/8字节 | 长整型 |
| long long | 8字节 | 长长整型 |
| float | 4字节 | 单精度浮点型 |
| double | 8字节 | 双精度浮点型 |
大小端存储问题
小端存储:低字节位存储在低地址,高字节位存储在高地址
大端存储:低字节位存储在高地址,低字节位存储在低地址
画图演示:
//判断机器大小端
#include<stdio.h>
int check_sys()
{
//判断机器大小端
int i = 1;
char* p = (char*)&i;
return *p;
}
int main()
{
int ret = check_sys();//ret==1为小端存储;ret==0为大端存储
if (ret == 1)
{
printf("小端");
}
else
printf("大端");
return 0;
}
运行结果:
unsigned与signed的区别:
画图演示:
题型讲解:
#include <stdio.h>
int main()
{
char a = -128;
//1000000000000000000000000010000000 原码
//1111111111111111111111111101111111 反码
//1111111111111111111111111110000000 补码
//因为要char类型,只有一个字节的空间;会发生截断
//10000000
// %u 以无符号十进制整型打印
//所以会发生整型提升,又因为char类型为(signed cahr)所以最高位为符号位,故整型提升后结果为
//1111111111111111111111111110000000
// 以%u打印,以无符号位打印,所以结果为
//4294967168
printf("%u\n", a);
return 0;
}
#include <stdio.h>
int main()
{
char a = 128;
//00000000000000000000000010000000
//发生截断
//10000000
//以 %u 打印发生整型提升
//11111111111111111111111110000000
//结果是
//4294967168
printf("%u\n", a);
return 0;
}
int main()
{
int i = -20;
//10000000000000000000000000010100 -20
//11111111111111111111111111101011
//11111111111111111111111111101100 补码
unsigned int j = 10;
//00000000000000000000000000001010 10
printf("%d\n", i + j);
//11111111111111111111111111101100 补码
//00000000000000000000000000001010 10
//11111111111111111111111111110110 结果的补码(以 %d 形式打印,看成有符号数,故最高位为符号位)
//11111111111111111111111111110101 结果的反码
//10000000000000000000000000001010 结果的原码
return 0;
}
int main()
{
char a[1000];
int i;
for (i = 0; i < 1000; i++)
{
a[i] = -1 - i;
}
printf("%d", strlen(a));
return 0;
}
五.浮点数在内存中的存储:
根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:
(-1)^S * M * 2^E
(-1)^S:表示符号位,当S=0,V为正数;当S=1,V为负数。
M:表示有效数字,大于等于1,小于2。
2^E:表示指数位