位运算详解(原码<-->反码<-->补码)

位运算就是对整数补码的各位上进行变换运算。

计算机对数的运算都是针对补码的,计算完后再得出原码。

*这里暂且视int类型为4字节,即32位。

原码:

  二进制数,如:7->0000000 0000000 00000000 00000111

                          -9->1000000 0000000 00000000 00001001

反码:

  正数:与原码相同

  负数:符号位(第一位)不变,其他位取反,1->0,0->1

  如:7->0000000 0000000 00000000 00000111

        -9->11111111 11111111 11111111   11110110

补码:

  正数:与原码相同

  负数:反码+1

  如:7->0000000 0000000 00000000 00000111

        -9->11111111 11111111 11111111   11110111


*运算结束后,如果是负数(符号位为1),则要将补码转换成原码,再得到十进制数。

 结果为正数则:原码=反码=补码


1.与运算(&)双目运算符

   将两个数的补码每一位对比,都为1,则为1,否则为0。

   7&-9=?

   7->补码=0000000 0000000 00000000 00000111(正数,补码与原码相同)

  -9->补码=11111111 11111111 11111111   11110111(负数,反码+1)

   7&-9 补码= 00000000 00000000 00000000 00000111(正数,原=反=补)

   所以 7&-9=7


2.非运算(~)单目运算符

   将该数的补码按位取反。

   ~5=?

   5->补码=反码=原码=00000000 00000000 00000000 00000101

   ~5->补码=11111111    11111111   11111111  11111010

       ->反码=11111111    11111111   11111111  11111001(补码-1)

       ->反码=10000000 00000000 00000000 00000110

  所以 ~5=-6


2.非运算(|)双目运算符

   将两个数的补码每一位对比,一个或两个为1则为1,否则为零。

   7|-8=?

   7->补码=0000000 0000000 00000000 00000111(正数,补码与原码相同)

  -8->补码=11111111 11111111 11111111   11111000(负数,反码+1)

   7|-8 ->补码=11111111 11111111 11111111   11111111

          ->反码=11111111 11111111 11111111   11111110

          ->原码=1000000 0000000 00000000 00000001

  所以 7|-8=-1


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值