c#按位求补(~)

原码:

把一个数用二进制形式表示,如果是正数,原码就等于其二进制数,如果是负数,最高位,也就是最左边的那一位变成1

把一个数表示成二进制的时候注意,一定要比正常表示的二进制多4位,用来标记是正数还是负数

比如:12可以表示成1100,但是写的时候要比它多四位,也就是 0000 1100,最高位为0,表示为正,如果是-12,就是1000 1100

           25可以表示成0001 1001,要比它多四位,所以写成 0000 0001 1001,-25写成 1000 0001 1001

补码:

如果是正数,补码就等于其原码

如果是负数,除了符号位,其它全部取反,然后得到一个整数,再+1,转换成二进制,和原来的前四位的反码组合,就是其补码

比如:-12,原码为1000 1100,全部取反,1111 0011,这个二进制等于3,只计算后四位,前四位是表示是正数还是负数,不参与计算,3+1=4,表示成原码,就是1111 0100

符号位:

原码左边第一位,正数为0,负数为1

取补:

正数:先全部取反,然后求其补码

负数:先求其补码,再全部取反

比如:

12:原码 0000 1100  全部取反   1111 0011,补码:1000 1101 最高位为1 表示为负数,后四位计算为13,所以~12=-13

-12:原码 1000 1100 补码:1111 0100 全部取反  0000 1011 最高位为0 表示为正数,后四位计算为11,所以~-12=11

总结:

正数和负数的取补,为其相反数减一

比如上面的~12=-13,~-12=11,可以求证  ~23=-24   ~-23=22

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TO_ZRG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值