用程序进行位运算

计算机中存储的数据是按照补码存储的。
怎么样计算补码:
正数的补码是其自身 负数的补码是对原码进行求反加一。如:-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的补码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值