C/C++中位操作符(&,|,^,~)的详解使用

前提知识储备:原码,反码,补码

正数原码:将数字从十进制原封不动的转化为二进制就是原码

负数的原码;将数字的第一位转化为二进制后,将第一个比特位变为1(也叫符号位,计算机用来判断是真数还是负数的办法。

如:-1的原码

int a=-1;
//1的原码: 00000000000000000000000000000001
//-1的原码:10000000000000000000000000000001

正数:原码,反码,补码相同

负数的反码:反码,人如其名,反码是负数的原码除了符号位,之外的所有比特位都变成相反的数,0变1,1变0

负数的补码:就是在反码的前提下加1,负数是用反码进行存储和运算的

目录

前提知识储备:原码,反码,补码

1.&

2.|

3.^

4.~


1.&

首先讲与‘&’,这个操作符在C/C++中的意思就是将它前后两个操作数转化为二进制的数字形式(计算机储存方式只有0和1,数字是以补码形式储存的,整数原,反,补码是一样的,负数的原码,反码是原码除符号位其他全部转化为相反的0或1,补码是加1),然后二进制位必须全部是1,最后得到的新二进制才是1,

即:同为1才为1

看下面代码

//&的使用,为了方便展示使用char
char a=7;//00000111
char b=1;//00000001
char c=a&b;//结果00000001
           //c=1
char d=-1;//补码:11111111
c=b&d;     //c:00000001
           //c=1

2.|

‘|’是或的意思,如果两个操作数的二进制位中有一个为1,则得到的数中其相对应二进制位置为1

即:有一个为1即为1

//‘|’的使用
int a=7//00000111;
int b=1//00000001;
int c=a|b;//c:00000111
          //c=7

3.^

‘^’的意思是异或,如果两个操作数二进制相应位置相同则对应新数位置为0,不一样则为1。

即:相同为0,相异为1

//‘^’的使用
char a=127;//01111111
char b=7;  //00000111
char c=a^b//c:01111000

//‘^’满足交换律,因为相同的数对应的所以二进制数都相同,a^a等于0,0异或任何数都等于它的本身,看实例


char a=127;//01111111^01111111
char b=a^a  //00000000
cahr c=7;   //00000111
b=a^c^a     //00000000^00000111
            //00000111
            //b=7

4.~

‘~’的意思就是按位取反,就是将二进制所以位置的数全部取为相反的0或者1

//‘~’的使用
char a=1;//00000001
char b=~a;//11111110;
          //b=-2;

如果对你有帮助的话,不如点赞加收藏,记得关注我哦。

Bye

猜你喜欢

转载自blog.csdn.net/m0_74316391/article/details/130656985