二进制的位运算操作

基本概念

  1. 原码: 最高位表示符号位的二进制数
  2. 反码: 正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
  3. 补码: 正数的补码就是其本身,负数的补码是在反码的基础上+1

正数的反码补码是一样的,计算机的计算都是使用补码来运算,计算的结果最终还需要转换为原码

与(&)运算 (相同位置都为1,则该位置是1,否则为0,正数补齐0,负数补齐1)

示例 1:
12 & 11
12的补码  01100
11的补码  01011
补码结果  01000
源码结果  01000
10进制结果   8

示例2:
12 & 3 
12的补码                    01100
3用于计算的补码              00011   (3的补码    011 正数补全0)
补码结果                    00000
原码结果                    00000
10进制结果                  0

示例3:
12 & -3
12的补码              01100
-3用于计算的补码       11101   (-3的补码 101 负数补全1)
补码结果              01100
原码结果              01100
10进制结果            12

示例4:
3 & -11
3用于计算的补码    00011   (3的补码 011  正数补全0)
-11的补码         10101
补码结果          00001
原码结果          00001
10进制结果        1   

或(|)运算(相同位置都为0,则该位置是0,否则为1,正数补齐0,负数补齐1)

示例1:
12 | 11
12的补码  01100
11的补码  01011
补码结果  01111
原码结果  01111
10进制结果 15

示例2:
12 | 3
12的补码        01100
3用于计算的补码  00011 (3的补码 011 正数补全0)
补码结果        01111
原码结果        01111
10进制结果  15

示例3:
12 | -3
12的补码           01100
-3用于计算的补码    11101 (-3的补码 101 补全1)
补码结果           11101
原码结果           10011
10进制结果      -3

示例4:
3 | -11
3用于计算的补码  00011  (3的补码011 补全0)
-11的补码       10101
补码结果        10111
原码结果        11001
10进制结果     -9

异或(^) (相同位置值不同为1,否则为0,正数补齐0,负数补齐1)

示例1:
12 ^ 11
12的补码  01100
11的补码  01011
补码结果  00111
原码结果  00111
10进制结果 7

示例2:
12 ^ 3
12的补码        01100
3用于计算的补码  00011
补码结果        01111
原码结果        01111
10进制结果     15

示例3:
12 ^ -3
12的补码           01100
-3用于计算的补码    11101  (-3的补码 101 补全1)
补码结果           10001
原码结果            11111
10进制结果 -15

示例4:
3 ^ -11
3用于计算的补码  00011  (3的补码011 补全0)
-11的补码       10101
补码结果        10110
原码结果        11010
10进制结果     -10

取反(~)(包括符号位所有位置均取反,1变0,0变1)

示例1:
~12
12的补码 01100
补码结果  10011
原码结果   11101
10进制结果 -13
示例2:
~-12
-12的补码  10100
补码结果   01011
原码结果   01011
10进制结果 11

左移(<<) (让操作数乘以2的n次幂,2进制表示则为后补n个0)

示例1:
12 << 2
12的补码          01100
补码结果        0110000
原码结果        0110000
10进制结果  48
示例2:
-12 << 2
-12的补码      10100
补码结果     1010000
原码结果     1110000
10进制结果  -48

右移(>>)(让操作数除以2的n次幂,2进制表示则为剔除n个0,不够,正数补0,负数补1,一定要有符号位

示例1:
12 >> 2
12的补码       01100
补码的结果        011
原码结果          011
计算结果   3

示例2:
3 >> 2
3的补码     011
补码结果   00
原码结果   00
计算结果   0

示例3:
-3 >> 2
3的补码    101  
补码结果   11 (负数位不够补1)
原码结果   11
计算结果   -1

示例4:
-12 >> 2
-12的补码      10100
补码结果         101
原码结果         111
10进制结果  -3

无符号右移(>>>) (正数与右移无差,负数需要先补全到32位,剔除n位,则前补n个0)

示例1:
12 >>> 2
12的补码       01100
补码的结果        011
原码结果          011
计算结果   3

示例2:
3 >>> 2
3的补码     011
补码结果   00
原码结果   00
计算结果   0

示例3:
-3 >>> 2
-3的补码    11111111111111111111111111111101  (负数需要补1到32位)
补码结果    00111111111111111111111111111111  
原码结果    00111111111111111111111111111111
计算结果    1073741823

示例4:
-11 >>> 2
-11的补码  11111111111111111111111111110101  (负数需要补1到32位)
补码结果   00111111111111111111111111111101
原码结果   00111111111111111111111111111101
计算结果   1073741821 

注意没有无符号左移

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值