关于按位取反怎么算

一、首先二进制在计算机的内存中是以补码的形式存储
二、正数的补码=原码=反码,
负数的反码=原码的取反(二进制数的符号位除外,一般来说在二进制的左边的最高位)
负数的补码=反码+1

注意:
若已知补码为 1111 1000,如何求其原码呢?
1. 方法1:求负数 原码—>补码 的逆过程。
注意:符号位保持不变!
(A)先 - 1,得到 1111 0111
(B)取反(符号位保持不变,其他位置按位取反 ),得到 1000 1000
2. 方法2:
注意:符号位保持不变!
(A)将这个二进制数中(即 1111 1000),除了符号位,其余位置按位取反,得 1000 0111
(B)+ 1,得到 1000 1000



总结:-1 后,再取反 和 取反后,再+1 的效果是一样的,这就和 -(3-1) 和 (-3 +1) 是一个道理。

三、按位取反怎么算
按位取反:二进制的每一位都取反(符号位+数据位)
公式法:
~x=-(x+1)
举两个例子:~11=-(11+1)=-12
~(-11)=10

公式法的内部是如何计算的呢:
以~11为例:
~11的计算步骤:

  1. 计算11的补码
    转二进制:0 1011
    计算补码:0 1011
  2. 按位取反:1 0100 (按位取反是在这进行的,即补码的形式进行按位取反) 注意:这里是补码
  3. 将转为原码:
    取其反码(因为补码是负数):1 1011
    末位加一:1 1100
  4. 符号位为1是负数,即-12

以~(-11)为例:
~(-11)的计算步骤:

  1. 计算-11的补码
    转二进制:1 1011
    计算补码:1 0101
  2. 按位取反:0 1010 (按位取反是在这进行的,即补码的形式进行按位取反) 注意:这里是补码
  3. 将转为原码:
    正数补码就是原码:0 1010
  4. 符号位为0是正数,即10
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值