0
点赞
收藏
分享

微信扫一扫

C语言,位运算

小贴贴纸happy 2022-02-19 阅读 113

二月十八日记录。

一、位运算操作符

1.“与”运算符

按位“与”运算符“&”是双目运算符,功能是使参与运算的两数各对应的二进位相“与”。当两个对应的二进位均为1时,结果为1;当两个均为0或有一个为0时,结果为0。

“与”运算
aba&b
111
000
100
010

例如,当我们计算89&38时:

8901011001
3800100110
89&3800000000

此时我们可以发现:按位“与”的一个作用是清零。若要使特定位置的1变为0,只需使该1与0进行按位“与”操作即可。

按位“与”的另一个作用是取特定位。若要取某一数的后五位,则只需使用一个后五位均为1的数与其进行按位“与”操作即可。

2.“或”运算符

按位“或”运算符“|”是双目运算符,功能是使参与运算的两数各对应的二进位相“或”。只要对应两个二进位中有一个为1,结果就为1。

“或”运算
aba|b
111
000
101
011

对应于“与”运算,“或”运算的一个功能是,要想使某个数后六位全为1,只需将该数与63按位“或”即可,即后六位均与1进行“或”运算,结果均为1。

3.“取反”运算符

“取反”运算符“~”是单目运算符,具有右结合性。功能是对参与运算的数的各二进位进行按位取反,即0变1,1变0。

4.“异或”运算符

按位“异或”运算符“^”是双目运算符。功能是使参与运算的两数各对应的二进位相“异或”,当两个二进位数相异时结果为1,相同时结果为0。

“异或”运算符
aba^b
110
000
101
011

“异或”运算的一个主要用途是使特定位翻转,如若想要使某数后7位翻转,则只需与一个后7位都是1的数进行“异或”操作即可。

“异或”运算的另一个用途,是在不适用临时变量的情况下实现两个变量值的互换。

例如:令x = 9,y = 4,此时我们可以:

具体过程如下:

00001001x
00000100y
x = x ^ y
00001101x
00000100y
y = y ^ x
00001101x
00001001y
x = x ^ y
00000100x
00001001y

5.“左移”运算符

“左移”运算符“<<”是双目运算符,它将“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数决定左移位数,高位丢弃,低位补0。

例如:39 << 2

00100111
39 << 2
10011100

6.“右移”运算符

与“左移”运算符相反。

但应注意低位丢弃,高位在正数时补0,负数时取决于编译系统,补0则为逻辑右移,补1则为算数右移。

7.循环移位

循环移位是将某数的二进制数中的低数位移至高数位或者将高数位移至低数位。

1.循环左移

将x的左端n位移到右端

2.循环右移

将x的右端n位移到左端

思想与“用临时变量实现两数互换”类似。

举报

相关推荐

0 条评论