正数的原、反、补码都相同 对于整形来说:数据存放内存中其实存放的是补码。 为什么呢 ? 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理,同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
大端字节序:把数据的低位字节序放在高地址处,高位字节序的内容放在低地址处。
小端字节序:把数据的低位字节序放在低地址处,高位字节序的内容放在高地址处。
练习1
#include<stdio.h>
int main()
{
int i = 0 ;
unsigned int j = 10 ;
printf("%d\n",i+j) ;
return 0;
}
解答:
%d: 认为内存中有符号位 %u:认为内存中没有符号位
%u用来打印无符号整形
练习2
#include<stdio.h>
int main()
{
char a = -1 ;
signed char b=-1 ;
unsigned char c = -1 ;
return 0 ;
}
解答:
补充说明:1.char到底是signed char 还是unsigned char,C语言标准并没有规定,取决于自己的 编译器
2.int是signed int ; short 是 signed short
练习3
#include<stdio.h>
int main()
{
char a = -128;
printf("%u\n", a);
return 0;
}
解答:
练习4
int main()
{
unsigned char i = 0;
for (i = 0; i <= 255; i++)
{
printf("hello world\n");
}
return 0;
}
此处的循环条件是i<=255,而i的类型是unsigned char ,其取值范围是0~255,因此循环永远不会终止,代码陷入死循环。
我们发现不论是有符号char还是无符号char,它们的区间长度相同,都是256个数字
int类型和char类型被我们归类于整形大家族,其实float家族的的存储和使用与整形大家族有很大的区别,后续的内容我还会再做补充,欢迎持续关注~