字,寻址和移位

最近在读深入理解计算机系统一书,顺便做了些笔记

每台计算机都有一个字长,指明整数和指针数据的标称大小,因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。即:对于一个字长为w位的机器而言,虚拟地址的范围为0~(2的w次方-1),程序最多访问2的w次方个字节
寻址和字节顺序
最低有效字节在最前面的方式,称为小端法。大多数intel兼容机都采用这种方法
最高有效字节在最前面的方式,称为大端法。大多数IBM和microsystems采用这种规则。
还有比较新的微处理器采用双端法,即把它们配置成作为大端或者小端的机器运行
设变量x类型为int,位于地址0x100处,它的十六进制值为0x01234567.地址范围为0x100~0x103的字节
大端法
    0x100   0x101  0x102   0x103
         01      23      45      67
小端法
    0x100    0x101    0x102    0x103
     67        45       23       01
注意:在0x01234567中,高端字节的十进制值为0x01,而低位字节值为0x67
移位运算
左移:x向左移动k位,丢弃最高位的k位,并在右端补k个0  
x=01100011  x<<4  x=00110000
右移:
逻辑右移,算术右移
逻辑右移在左端补k个0,算术右移在左端补k个最高有效位的值。
x=10010101  x>>4(逻辑右移)  x=00001001
x=10010101  x>>4(算术右移)  x=11111001
c语言标准并没有明确定义应该使用哪种类型的右移。对于无符号数据(也就是以限定词unsigned声明的整型对象),右移必须是逻辑的。而对于有符号数据(默认的声明的整型对象),算术的或者逻辑的右移都可以。实际,几乎所有的编译器组合都对有符号数据使用算术右移,且许多程序员也都假设机器会使用这种右移
java对于如何进行右移有明确的规定。表达式x>>k会将x算术右移k个位置,而x>>>k会对x做逻辑右移

posted @ 2013-03-23 14:16  tuteng  阅读(282)  评论(0编辑  收藏  举报