在计算机中所有数据都是通过一个个二进制位存储的,单位为(bit)。每八位二进制数(eq:0001 0010)代表一个比特(byte)大小,即1字节=8位。
1.数据类型中,还分为有符号(signed)和无符号(unsigned)类型2.关于原码,反码,补码只有正数可以放在无符号的变量中,如果是有符号,最高位是0,为正数;最高位是1,为负数。
其中char无法判断是有符号和无符号。char也被划为整形,是因为,虽然是字符类型,但是字符类型存储的时候,存储的是asc码值,asc码值是整数。
原码:直接将二进制按照正负数的形式翻译成二进制。
反码:将原码的符号位不变,其他位依次按位取反
补码:反码+1
正数的原码,反码,补码都相同。对于整形来说:数据存放内存中其实是补码。
3.关于大小端的介绍大端存储:将数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端存储:将数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中
举个例子:0x11223344 ,地址从左到右,为由低到高
小端:44 33 22 11
大端:11 22 33 44
那么如何判断是否为大端存储还是小端存储呢?
#include
输出的是多少?
int main() {char a = -1;signed char b= -1;unsigned char c= -1;printf("a=%d,b=%d,c=%d", a, b, c);return 0;}
a=-1,b=-1,c=255
解析:
-1的原码1000 0000 0000 0000 0000 0000 0000 0001
反码:1111 1111 1111 1111 1111 1111 1111 11110
补码:1111 1111 1111 1111 1111 1111 1111 1111
又因为前面是char,所以只取8位,即:1111 1111。但打印的时候%d,导致a整型提升,最高位为1,所以补24位1,为补码,这时候打印的仍为-1,同理b。
而c:发生整型提升,无符号,高位补0,0000 0000 0000 0000 0000 0000 1111 1111转换为十进制为255。