• 友链

  • 首页

  • 文章归档
h u a n b l o g
h u a n b l o g

欢

HI,Friend

02月
17
其他

二进制运算

发表于 2022-02-17 • 字数统计 4379 • 被 2,082 人看爆

按位与运算符(&)

参加运算的两个数,按二进制位进行“与”运算。

运算规则

只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)
即 0 & 0= 0,0 & 1= 0,1 & 0= 0,1 & 1= 1。

例题

3 &5  即 00000011 & 00000101 = 00000001 ,所以 3 & 5的值为1。

按位或运算符(|)

参加运算的两个数,按二进制位进行“或”运算。

运算规则

参加运算的两个数只要两个数中的一个为1,结果就为1。
0 | 0= 0, 1 | 0= 1,0 | 1= 1, 1 | 1= 1

例题

2 | 4 即 00000010 | 00000100 = 00000110 ,所以2 | 4的值为 6 。

异或运算符(^)

参加运算的两个数,按二进制位进行“异或”运算。

运算规则

参加运算的两个数,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
即 0 ^ 0=0,0 ^ 1= 1,1 ^ 0= 1,1 ^ 1= 0

例题

2 ^ 4 即 00000010 ^ 00000100 =00000110 ,所以 2 ^ 4 的值为6 。

按位取反运算符(~)

加运算的一个数据,按二进制进行"取反"运算。

运算规则

对一个二进制数按位取反,即将0变1,1变0。
~1=0,~0=1
正数:将数字转换成二进制后取反,然后在二进制符号位之后再次取反后加1得到最终结果二进制值,最后转换成十进制值;
负数:将数字转换成二进制后取反,然后在二进制符号位之后先加1再次取反得到最终结果二进制值,最后转换成十进制值

例题

~5---->00000101 ---->取反---->11111010  -----> 符号位后取反---->10000101---->符号位后面加1---->10000110     转换成十进制之后就是-6 , 所以~5的结果为-6
~-5---->10000101 ---->取反---->01111010---->符号位后面加1---->01111011  -----> 符号位后取反---->00000100    转换成十进制之后就是4 , 所以~-5的结果为4

左移运算符(<<)

将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

运算规则

设 a=1010 1110,a = a<< 2 将a的二进制位左移2位、右补0,即得a=1011 1000。
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

例题

11 << 1 -> 0000 1011 -> 0001 0110 -> 22

左移几位,就是在原数乘2^n次方
左移1位:11 * 21 = 22
左移2位:11 * 22 = 44

右移运算符(>>)

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

运算规则

设 a=1010 1110,a = a >> 2 将a的二进制位右移2位、左补0,即得a=0010 1011。
操作数每右移一位,相当于该数除以2

例题

11 >> 1 -> 0000 1011 -> 0000 0101 -> 5

二进制加法

对于二进制加法和十进制的加法本质上是一样的,只是前者逢2进1,后者逢10进1。

十进制加法

1 + 1 = 2
2 + 4 = 4

二进制加法四种情况

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10 //1 + 1 十进制为2,将其转化为二进制为10

例1

1 + 1 = 10          //十进制为2,将其转化为二进制为10
10 + 10 = 100       //1 + 1 二进制为10,后面0 + 0 为0,所以二进制为100
100 + 100 = 1000    //1 + 1 二进制为10,后面的0 + 0 为 0, 所以二进制为1000
1000 + 1000 = 10000 //二进制10000
10000 + 1000 = 11000 //按加法从右到左依次对应,二进制为11000

//10000 + 1000示例
    10000
+    1000    
    11000

例2

0111 + 1110
  0111
+ 1110
 10101

//从右到左进行加法
- 第一位:1 + 0 = 1
- 第二位:1 + 1 = 10,向前以为进一
- 第三位:1 + 1 = 10,刚刚第二位有进一,所以 10 + 1 = 11,向前进一
- 第四位:0 + 1 = 1,第三位有进一,所以1 + 1 = 10,前面没数字了,不需要进一
- 最终结果为10101

二进制减法

对于二进制减法和十进制的减法本质上是一样的,只是前者不足向下一位借一,然后该数加2。
减法运算可以通过将减数取反,并加1来转化为加法运算

二进制减法四种情况

0 - 0 = 0
1 - 0 = 1
1 - 1 = 0
10 - 1 = 1  //0 - 1 不足,向前借一位,然后加上该数 + 2,实际就是 2 - 1 = 1

例1

101001 - 011010 = 
  101001
- 011010
  001111

//从右到左进行减法
- 第一位:1 - 0 = 1
- 第二位:0 - 1 不足,向前借一,然后 + 2,即 2 - 1 = 1
- 第三位:由于第二位借一,导致变为-1,需向前借一,即2 + (-1) = 1,结果1 - 0 = 1
- 第四位,第三位借一,为0,不足,向前借一,为2 + 0 = 2,即 2 - 1 = 1
- 第五位:第四位借一,为-1,不足,向前借一,为2 + (-1) = 1,即结果为1 - 1 = 0
- 第六位:由于第五位借一,变为0,即结果为:0 - 0 = 0

例2

减法运算可以通过将减数取反,并加1来转化为加法运算,比如:小的数 - 大的数。
001001 - 011010 =
  001001
- 011010

- 步骤一:将减数取反,得到其反码:011010 -> 100101
- 步骤二:将反码加1,得到减数的补码:100101 + 1 = 100110
- 步骤三:将被减数和减数的补码相加:001001 + 100110 = 101111
- 步骤四:检查结果的最高位,如果是1,则表示结果为负数。根据补码表示法,负数的补码等于其原码取反再加1。所以,结果101111转化为负数形式为: -010001。因此,001001 - 011010 的结果为 -010001,即负17。

二进制乘法

和十进制乘法没什么区别,只不过在加法部分按二进制加法计算

二进制乘法四种情况

0 * 0 = 0 
0 * 1 = 0
1 * 0 = 0
1 * 1 = 1

例

1001 * 1101 = 
        1001
      * 1101
    ------------    //先按十进制进行乘法计算
        1001
       0000
      1001
     1001
    ------------    //按二进制加法进行计算
     1110101

二进制除法

和十进制除法没什么区别,只不过在减法部分按二进制减法计算

二进制除法四种情况

0 / 0 = 0
0 / 1 = 0
1 / 0 = 0 (无意义)
1 / 1 = 1

例

进制05.png

参考

  • leijee-按位&按位|按位~的详解
  • 菜鸟教程-位运算(&、|、^、~、>>、<<)
  • ShenMingYi_-位运算符之---左移右移运算符(简单易懂)
  • 江南霹雳堂雷家雷无桀-二进制的加减乘除法全了看一下叭
  • 16:27-二进制加减运算
  • 撼沧-二进制减法图解
  • c l o u d-C++-030-位运算与进制
分享到:
DOTween动画插件
子网地址计算
  • 文章目录
  • 站点概览
欢

网红 欢

你能抓到我么?

Email RSS
看爆 Top5
  • mac系统版本与Xcode版本有冲突 4,080次看爆
  • JAVA_HOME环境配置问题 3,730次看爆
  • AssetBundle使用 3,499次看爆
  • VSCode配置C++开发环境 3,257次看爆
  • Lua反射 3,133次看爆

Copyright © 2025 欢 粤ICP备2020105803号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图