位运算符——取反运算符~的理解

学习位运算符中的取反运算符—— ~ 时,要搞清楚以下几点:

  1. 正数的补码是其原码,原码就是其二进制数表示
  2. 负数的补码为符号位不变,原码取反再加一
  3. 二进制数有八位数,第一位就是符号位
  4. 符号位中,0代表正数,1代表负数
  5. 取反即1变0,0变1

这几点看不懂没关系,来举几个栗子就懂了。

1的原码:0000 0001(其中第一个0为符号位,表明它为正数)
1的补码:0000 0001(因为1是正数,所以补码是其原码)
对其取反:1111 1110
由于符号位变成了1,即是负数的表示,所以要再将其转换为补码,负数的补码转换为——符号位不变,原码取反再加一
原码取反:1000 0001(符号位不变,其余位依次取反)
再次加一:1000 0010
即1按位取反后为-2

-1的原码:1000 0001(第一位为1,即负数)
-1的补码:1111 1111(符号位不变,其余位依次取反再加一)
对其取反:0000 0000
即-1按位取反后为0

或者用简单的公式代入直接得结果:-(a+1)

再举几个栗子:

~7的结果是?

原码:0000 0111
补码:0000 0111
取反:1111 1000
取反:1000 0111
加一:1000 1000

or -( 7+1 ) =-8
~7等于-8

~-4的结果是?

原码:1000 0100
补码:1111 1100
反码:0000 0011

or -( -4+1 )=3
~-4等于3

扩展:快速写出二进制数的方法
128 64 32 16 8 4 2 1
8个数分别对应二的七次方、六次方、五次方、四次方、三次方、二次方、一次方、零次方
十进制数转换成二进制数,只用看这8个数中,有哪几个数相加可以得到此十进制数,就在哪一位上用1填充,其余用0填充。
譬如:12为8+4
则在上面8个数对应8和4的位置上用1填充
即:0000 1100

  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值