勤&快

问题其实就是你期望的东西和你体验的东西之间的差别
随笔 - 55, 文章 - 0, 评论 - 68, 引用 - 0
数据加载中……

用程序进行位运算

计算机中存储的数据是按照补码存储的。
怎么样计算补码:
  1. 正数的补码是其自身
  2. 负数的补码是对原码进行求反加一。如:-6的原码是1000 0110,其中开始的1位符号为,表示是负数;那么-6的反码是除符号外按位求反,得,1111 1001;再加一,得,1111 1010。所以-6,在计算机中实际是1111 1010。也就是说,虽然你在屏幕上看到何输入的都是-6,但是计算机对-6进行任何位操作,那么其实操作的是1111 1010。这里简化了-6只用8位表示。
我的计算机中int型为4字节,那么5的二进制表示是00000000 00000000 00000000 00000101,那么-6的二进制表示是11111111 11111111 11111111 11111010。
 
主要的位运算有:
 
按位与 &
按位左移 <<
按位取反 ~
按位或 |
按位右移 >>
按位异或 ^
无符号右移 >>>
 
这里以取反运算为例。对x取反,其结果表示为整数为 ~(x) = - (x+1)。如~(5) = -(5+1) = -6。
下面解释为什么:
如上面所说,5的二进制表示是00000000 00000000 00000000 00000101,那么按位取反则为11111111 11111111 11111111 11111010,恰好是-6的补码,所以,机器认为~(5) = -6。
同样,~(-6) = 5。同理,-6的表示是11111111 11111111 11111111 11111010,按位求反刚好是5的补码。
 
再如,按位左移。2147483645 = 01111111 11111111 11111111 11111101。
i = 2147483645 << 1,得到的结果是 i = -6.因为左移一位之后的结果就01111111 11111111 11111111 111111010,恰好是-6的补码。

posted on 2007-04-05 12:59 daning 阅读(440) 评论(0)  编辑  收藏 所属分类: others


只有注册用户登录后才能发表评论。


网站导航: