[C/C++入门][进制原理]28、计算机中二进制的位运算符(完全理解位运算)

说起运算符,我们之前了解了,算数运算符(+-*/%),逻辑运算符(&&,||,!),关系运算符(><,==),都是和生活息息相关的,所以理解起来比较简单,但是我们今天要认识的是位运算符。

位运算符是什么

位运算符是在计算机编程中用于直接操作整数的二进制位的运算符。它们对整数进行操作时,会把整数看作一系列的二进制位来进行处理。

假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:

A = 0011 1100

B = 0000 1101

然后把他们二进制每个位上的数进行比较。像图这个样子。然后我们就可以得到。

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

位运算有什么作用

了解和掌握位运算对于成为一个全面的程序员是非常有用的,尤其是在系统级编程、游戏开发、嵌入式系统等领域,位运算符呢经常用于各种场景:

  • 数据压缩和加密算法:位运算可以用来快速地对数据进行位级的操作,这对于实现高效的数据压缩和加密算法非常重要。

  • 硬件控制:在底层编程中,位运算被用于读写硬件寄存器,控制硬件设备的特定功能。

  • 位标记和标志:位运算可以用来设置或检查某个特定的标志位,比如权限位、状态位等。

  • 数学和逻辑运算:位运算可以用于实现一些高效的数学和逻辑运算,如乘法、除法、取模等。

  • 优化性能:在某些情况下,位运算比传统的算术运算更快,可以用于提高程序的运行效率。

  • 考试中:在编程考试中位操作非常常见,尤其是理解计算机原理这一块

如何理解位运算符

  1. 按位与 (&): 这个运算符比较两个数值的每一位,如果两位都是1,则结果位为1;否则结果位为0。

    a = 5  # 二进制: 0101
    b = 3  # 二进制: 0011
    result = a & b  # 结果: 0001, 十进制: 1
    c = 10  # 二进制: 1010
    d = 4   # 二进制: 0100
    result = c & d  # 结果: 0000, 十进制: 0

  2. 按位或 (|): 如果两个比较位中至少有一个是1,则结果位为1;否则结果位为0。

    a = 5  # 二进制: 0101
    b = 3  # 二进制: 0011
    result = a | b  # 结果: 0111, 十进制: 7
    c = 10  # 二进制: 1010
    d = 4   # 二进制: 0100
    result = c | d  # 结果: 1110, 十进制: 14

  3. 按位异或 (^): 如果两个比较位不同,则结果位为1;否则结果位为0。

    a = 5  # 二进制: 0101
    b = 3  # 二进制: 0011
    result = a ^ b  # 结果: 0110, 十进制: 6
    c = 10  # 二进制: 1010
    d = 4   # 二进制: 0100
    result = c ^ d  # 结果: 1110, 十进制: 14

  4. 按位取反 (~): 这是一个一元运算符,它会反转一个数的每一位,1变成0,0变成1。在大多数语言中,它实际上是计算补码的相反数。

    a = 5  # 二进制: 00000101 (假设整数为8位)
    result = ~a       # 结果: 11111010, 十进制: -6 (注意,这里考虑了二进制补码表示)
    c = 10  # 二进制: 00001010 (假设整数为8位)
    result = ~c       # 结果: 11110101, 十进制: -11

  5. 左移 (<<): 这个运算符将二进制位向左移动指定的位置数,高位丢失,低位补零。

    a = 5  # 二进制: 0101
    result = a << 2  # 结果: 010100, 十进制: 20
    c = 10  # 二进制: 1010
    result = c << 1  # 结果: 10100, 十进制: 20

  6. 右移 (>>): 这个运算符将二进制位向右移动指定的位置数,低位丢失,高位根据符号位(有符号数)或补零(无符号数)填充。

    a = 20  # 二进制: 10100
    result = a >> 2  # 结果: 0101, 十进制: 5
    c = 20  # 二进制: 10100
    result = c >> 1  # 结果: 01010, 十进制: 10

学习和总结

假设变量 A 的值为 60,变量 B 的值为 13,则:

二进制格式表示,它们如下所示:

A = 0011 1100

B = 0000 1101

运算符描述实例
&

按位与操作,按二进制位进行"与"运算。运算规则:

0&0=0;   
0&1=0;    
1&0=0;     
1&1=1;
(A & B) 将得到 12,即为 0000 1100
|

按位或运算符,按二进制位进行"或"运算。运算规则:

0|0=0;   
0|1=1;   
1|0=1;    
1|1=1;
(A | B) 将得到 61,即为 0011 1101
^

异或运算符,按二进制位进行"异或"运算。运算规则:

0^0=0;   
0^1=1;   
1^0=1;  
1^1=0;
(A ^ B) 将得到 49,即为 0011 0001
~

取反运算符,按二进制位进行"取反"运算。运算规则:

~1=-2;   
~0=-1;
(~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。
<<二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。A << 2 将得到 240,即为 1111 0000
>>二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。A >> 2 将得到 15,即为 0000 1111

相信看到这里,你们以及大概理解了位运算的结果,说实话我工作十年是没有遇到过需要用位运算的情况,但是接触教育的这几年,频繁的刷到考试题,因此算是查漏补缺吧。

加油,有任何问题我们评论区交流吧 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值