/* 来一个简单的函数判断芯片的大小端模式*/
int n=0x01;
if(*(char*)&n)
printf("chip is small endian ")
else
printf("chip is big endian")
- &n 取得的地址值是 n变量的低地址的值,从左往右存储,比如0x01 0x02 来存储值的话,&符号 都从变量的0x01低地址开始 取值。
- 其次,大小端的排序是相对于字节来做区分的,所以,强制转化为低地址的单字节变量进行取值。
- 那么,如果是小端的话,0x01会被存储到低地址,00被存储在高地址,所以最后得到的值 是 1,大端模式则是零,一般来说,英特尔的芯片都是小端的芯片,所以取值一般都是从低地址取值,如1所说,所以小端在取值效率上,相对很快。
/* --------------------补码反码-- ---------------*/
正数的补码反码原码都是他本身。
负数的补码为反码加一,补码最大的好处在于,芯片中减法计算, 一个数直接通过加上一个数的补码,即可实现减法运算。
反码的理解 其实从二进制的存储角度去想,最好 理解。
二进制的数的反码加上源码,就是fffff的值,每个位上的值都为1,加上1,那么都为零,刚好向前进一, 其实就是补码就是反码加一,在二进制中, 减去一个数,相当于加上他的补码,所以这就是补码最真实的意义所在,如 钟表上的时钟,减去4小时和加上8小时都是指向8点钟。