Little-endian和Big-endian模式
这段C程序的结果是多少?
嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式
的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是
从高字节到低字节。例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假
设从地址0x4000开始存放)为:
而在Big-endian模式CPU内存中的存放方式则为:
32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开
始存放)为:
而在Big-endian模式CPU内存中的存放方式则为:
在本题中E的ASCII值是0x45(0100 0101),M是0x4D(0100 1101),它们在内存中的表现如
下:
结构bitstruct是9位的,执行copy以后,b在内存中如下:
b1占5位:
中间跳过2位,b2占2位:
计算的时候再把它们逆转过来,就成了下面的形式:
b1最高位是0,表示其是正数,其原码跟补码一致,所以b1=2^0+2^2=5。
b2最高位是1,表示其是负数,其原码要进行取反操作再加1为10所以b2=-(2^1)=(-2)。
答案:5,-2