绿豆.Net

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1, 存储器由若干“字节”byte单元组成。而每个字节都有一个地址,当然这个地址是物理排序的,怎么说呢?好比就是从0开始刻出的标尺一样的刻度位置,所以地址是物理固定的;我们说的改变地址,其实改变的不是地址,而是地址里面的内容。字节则是由若干个二进制位bit组成的。而若干个字节组成一个存储单元(比如4个字节可以存储Int整数的单元),叫做“字”(word)。在每一个存储一个数据或者一个指令(所谓的32位,64位指令系统)。另外,一个字节由8个二进制位组成,最右边的一位是“最低位”,最左边的一位是“最高位”,每个位上的值是0或者1。比如ox10000001表现了这个高位序列。

2, 表示数值的方法:原码,反码和补码。

1) 原码。最高位是符号位(0表示正,1表示负),其他各位表示数值本身的绝对值。注意小谭说,+0和-0表示的不是同一个0,在内存中有两个表示,所以0不适合计算机的运算。有个问题,在我们编程中经常用到比较(如:value == 0 )这样的表达式,经过实践的检验是正确可行的,我测试了一下,正0和负0都表示成了同一个值。怎么证明小谭的说法,请大家指点。

2) 反码。若一个值是正,其反码和原码是一样的;若为负,则符号位为1,其余各位是对原码取反。

3) 补码。原码和反码不适合计算机内运算,因为要单独处理其符号。补码规则:对整数,原码、反码、补码相同;对负数,最高位为1,其余各位取原码的反,然后对整个数加1

4) 总结:这些数值表示,在我编程过程中从来没有考虑和体验过,一定是我太菜的缘故。

3, 位运算。运算量只能是整数或者字符型,不能为实数等其他类型。

1) & 按位与:两个相应位都位1,则为1,否则为0。特殊用途

l         清零。找一个数满足原来的数中为1的位在新数中对应0条件即可。

l         取一个数的指定位。比如高位或者低位,将所取的位对应1,其他位对应0

2)  |按位或:两个相应位只要有一个为1,该位结果为1。作用主要是对一个数据某些位定位为1

3)  ^ 按位异或:参加运算的两个相应位同号,则为0;异号则为1。注意

l         特定位翻转。构造的数在特定位上取1,其余位取0

l         0^,则是保留原值。

l         交换两个值,不用临时变量。a = a ^b; b=b^a;a=a^b

4)  ~ 取反:对二进制按位取反,注意其优先级特别高

5)  <<  左移:左移一位相当于该数乘以2,两位乘以4,改规则只适合在左翼中溢出的被舍弃的高位不含1的情况。

6)  >> 右移:就好理解了,但是要注意符号位问题。

l         无符号数,右移在左边高位移入0

l         有符号数,整数的话移入0,负数的话,移入01取决于所用的计算机系统。即移入0为“逻辑右移”,移入1为“算术右移”。

posted on 2008-04-29 13:37  杜军  阅读(256)  评论(0编辑  收藏  举报