再谈带符号整数和大小Endian的关系

1050阅读 0评论2013-10-26 zenith518
分类:高性能计算

最近在搞golang, 还是复习一下带符号整数以及在内存中的表达方式,同时涉及到大小印度的关系。

带符号的整数,拿int8为例 -128~127
int32为例,-4G/2~4G/2

表达正数,比较容易理解,即为正常数二进制表达,
负数表达为取反减一,比如-1,0xff-abs(-1)-1=0xff, -2 0xff-abs(-2)-1=0xfe,以此类推。

大小印度(数的高低位存储次序),与系统类型有关。

如果系统以字节(8bit)为基本单位的系统,是4bit为字节,则高低位组以4bit为单位,int8就比较奇怪了。
以int8,为例,如果是BigEndian,存储时符合人类阅读习惯的。
如果是LittleEndian,存储时和阅读习惯相反。
那-54为例,

但由于,基本单位是8bit字节所以,在内存的表达,并无不同。
内存表达,0xff-abs(-54)-1=0xCA,  如果以BigEndian 方式表达,则即为0xCA
如果以LittleEndian表达,则为0xCA。

如果以4bit字节为单位,Little Endian在内存表达,就要高低位反序表达, 0xAC。在手机系统中,某些特定字段会以此种方式表达。

以Int32,为例,-10920  0xffffffff-abs(-10920)-1=0xFFFFD558, BigEndian 即为0xFFFFD558
LittleEndian为:0x58D5FFFF

20131026 
only for Memo
上一篇:跨平台UDP over SSH Tunnel
下一篇:Motor Theory