一:
unsigned long i; /* unsigned long 类型为4字节*/
char c1=0xa4;
char c2=0x31;
i = c2<<8 | c1;
问:i = (用16进制格式)
i=0xffffffa4
二:
unsigned long i; /* unsigned long 类型为4字节*/
char c1=0x74;
char c2=0x31;
i = c2<<8 | c1;
问:i = (用16进制格式)
i=0x3174
计算机数值存储原理:
char a = 0x74 = 116;(char 从-128~128)
存储:01110100(正的)
i = c2<<8 | c1; = 0x3100 | 0x74 = 0x3174
char a = 0xa4 = 164 = -92;(其实是一个负数表示在char里)
存储:11111111 11111111 11111111 10100100
i = c2<<8 | c1 = 0x3100 | 0xFFFFFFA4 = 0xFFFFFFA4
注:
char c1=0xa4; (char类型为8位)
c1=10100100 (二进制)
最高位1表示负数,0表示正数。
负数存储在计算机中必须为正数,转换的口诀为:
负数的绝对值的二进制形式,按位取反再加一。
如本例中的:
char c1=0xa4=10100100---------->|10100100| (绝对值的二进制形式)--------->01011011 (按位取反)----------->01011100 (加1)等于92,其实也就是-92存储在计算机中。