- 数据的存储
- 库函数是不属于C语言的,它是由编译器的厂商提供的,C语言只规定库函数的标准:如函数名、参数类型、返回值类型,函数功能
- C语言本身自带的类型有:
Char/short/int/long/long long---->整形家族
Float/double---->浮点家族
类型的意义:1.使用这个类型开辟了多少的内存空间
- 看待内存的视角不同(若是int,看待的就是整形视角,float是浮点视角)
- 一般short/int/long直接写出来都是代表有符号数,而char是否有符号取决于编译器
- 如何理解signed和unsigned?
如char为1个字节,8个比特位,在内存中补码假设为11111111
如果为unsigned,则8个1都为有效位,即原码等于补码等于反码
如果为signed,则高位代表符号位
举例:Int main()
{
Unsigned char c1 = 255;
Printf(“%d\n”,c1);--->结果为255
Char c2 = 255
Printf(“%d\n”,c2);--->结果为-1
Return 0;
}
上面这个例子告诉我们高位的1是符号位和有效位的区别,当为有效位结果是255,符号位则为-1
- 对于有符号的char取值范围是-128~127,无符号char的范围是0~256
- 整形在内存中的存储:
对于整形来说数据中存放的是整形的补码,而数据的加减也是通过补码完成的,我们原反补码的计算规则是补码减1等于反码,反码符号位不变别的位按位取反得到原码--->这个计算方式是针对负数而言的,换言之就是补码最前面的符号位为1的时候。若现在符号位为0,直接就是原反补相等
- 小端字节序:把一个数据低位字节的内容存放在内存的低地址处,把高位字节的内容存放在内存的高地址处
如:int a = 0x11223344
其中11就是高字节,44就是我们的低字节
大端字节序:把一个数据高位字节的内容存放在内存的低地址处,把低位字节的内容放在高地址处
- 为什么会有大小端字节序之分?
若我们的数据大于一个字节时,就存在数据存储的一个顺序问题,比如一个数据有2个字节,放在一个整形变量里,那么如何安排存储的顺序就要我们去解决,于是就有了我们大小端字节序之分
- 如何判断是大端字节序还是小端字节序
Int main()
{
Int a = 1;
Char * p = (char*) &a;
If(*p ==1)
{
Printf(“小端字节序\n”);
}
else
{
Printf(“大端字节序\n”);
}
Return 0;
}