C移位转换

来源:互联网 发布:好用的网络电视播放器 编辑:程序博客网 时间:2024/06/05 20:40

一:

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存储在计算机中。