十四、位运算

本文详细介绍了位运算符的使用方法及应用场景,包括按位与、按位或、按位异或、取反、左移、右移等运算符,并通过实例展示了如何利用这些运算符进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、位运算符和位运算 

1、&  按位与         ~  取反         |  按位或         <<  左移         >>  右移         ^   按位异或 

2、注意:

         a.  位运算符中除 ~ 以外,均为二目运算符,即要求两侧各有一个运算量

         b.  运算量只能是整型或字符型的数据,不能为实型数据

3、“按位与”运算符 &

(1)含义:参加运算的两个数据,按二进制位进行 “与” 运算

(2)如果两个相应的二进制位都位1,则该位的结果值位1,否则为0      例:0 & 0 = 0      0 & 1 = 0      1 & 0 = 0      1 & 1 = 1

(3)注意:3 & 5 不等于 8,应为  0 1 1     (3)

                                                       1  0 1     (5)

                                                       0  0 1     (1)

                   如果参加运算的是负数,则要以补码形式表示为二进制数

(4)按位与运算的用途

         a.  清零

         若想对一个储存单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:原来的数中位1的位,新数中相应位为0,               然后使二者进行 & 运算      

         例:要求 将二进制数 11100101 的第2位清零           11100101

                                                                                       & 11100001

                                                                                          11100001

         b.  取一个数中某些指定位

         例:对一个字型数据取出其低 8 位的值        11010101 01011011

                                                                           &  0000000 111111111

                                                                               0000000 01011011

4、“按位或”运算符 |

     含义:两个相应的二进制位中只要有一个为1,该位的结果值位1     例:0 | 0 = 0     0 | 1 = 1     1 | 0 = 1     1 | 1 = 1

5、“异或”运算符 ^       (可以逆运算)

(1)含义:参加运算的两个二进制位同号则结果为0(假),异号则结果为1(真)     例:0 ^ 0 = 0     0 ^ 1 = 1     1 ^ 0 = 1     1 ^ 1 = 0

(2)功能:

         a.  使特定位翻转

        例:设有01111010,想使其低4位翻转,即1变为0,0变为1     

                                                    01111010

                                                 ^ 00001111

                                                   01110101

        结论:与 0 异或不变,与 1 异或翻转

       b.  交换两个数的值

       例: a=3,b=4,将a,b的值交换

               a = a ^ b ;

               b = b ^ a ;

               a = a ^ b ;

4、“取反”运算符 ~

含义:是单目运算符,用来对一个二进制数按位取反,即将0变1,将1变0

5、“左移”运算符 <<

含义:将一个数的各二进制位全部左移若干位

例: a = < < 2 将 a 的二进制数左移2位,右边补0 若 a = 15,即二进制数00001111,左移2位得00111100,十进制数60

注意:

a.  若高位左移后溢出,则舍弃

b.  相当于每左移以为就乘以2,但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况 

6、“右移”运算符 >>

含义:将一个数的各二进制位全部右移若干位,移到右端的低位被舍弃,右移一位相当于除以2

例: a = 017 时,二进制形式为00001111,则 a > > 2 == 00000011

注意:

a.  对无符号数,高位补0

b.  对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0

c.  如果符号位原来为1(即负数),则左边移入0还是1取决于所用的计算机系统

d.  移入0的称为“逻辑右移”;移入1的称为“算术右移”     例:a 的值是 -2

                                                                                              a == 11111110

                                                                                              无符号数:a > >1:01111111(逻辑右移)

                                                                                              有符号数:a > >1:11111111(算术右移)

6、位运算赋值运算符

例如:&=    |=   >>=   <<=   ^=                a &= b 相当于 a = a & b              a <<= 2 相当于 a = a << 2

 

 

 

 

 

 

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值