如何用位运算符(~)和数据运算符(-)来计算表示n + 1和n - 1?

今天做笔试题时碰到的,一脸懵逼,在网上查了查,发现原来是这样的

原文地址:http://blog.chinaunix.net/uid-31439230-id-5763282.html

由题目可知,我们只能用位运算符~和数据运算符-来计算表示n + 1 和n - 1,首先我们必须清楚位运算符~和数据运算符-的作用:

    位运算符~:为按位取反运算符
    数据运算符-:将一个数设为负数
    我们都知道正数和负数都是以补码的形式存在内存中,正数的原码、反码和补码都是自己本身,而负数的反码是原码按位取反,补码则等于反码+1。
    所以我们可以这样理解, 负数以补码的形式存在内存中,补码的值为原码取反加1。 看到这句话,我相信大家应该知道怎么去用这个“-”数据运算符。
    “~”位运算符是数据按位取反的作用,“-”数据运算符是数据按位取反加1。
    大家思考一下:一个数按位取反之后再按位取反一次是不是没有变化?答案是肯定没有变化的。 相信不用我再多说了,大家心里都有了n + 1用“~”和“-”表示的答案了。
    没错,答案就是: n + 1  <=>  -(~n)
    有疑问的同学可以一起验证一下:如十进制数30,其二进制原码为:0001 1110
    ~( 0001 1110 ) => 1110 0001
    -( 1110 0001 ) => ~( 1110 0001 ) + 1 => (0001 1110) + 1 => 0001 1111 = 31

    那么n - 1该怎么表示呢?
    根据上面的讲解,同理可得:  n - 1  <=>  ~(-n)
    对这个答案有疑问的同学,可以自己随便设一个数验证一下。
     其实也可以用数学证明验证一下:
    已知:
    ① -n = ~n + 1 => ~n = -n-1
    设x = -n;
    由①得:~x = -x-1
    进而得~(-n ) = -(-n) -1 => ~(-n) = n-1;
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值