最近在搞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
阅读(1019) | 评论(0) | 转发(0) |