前提知识储备:原码,反码,补码
正数原码:将数字从十进制原封不动的转化为二进制就是原码
负数的原码;将数字的第一位转化为二进制后,将第一个比特位变为1(也叫符号位,计算机用来判断是真数还是负数的办法。
如:-1的原码
int a=-1; //1的原码: 00000000000000000000000000000001 //-1的原码:10000000000000000000000000000001
正数:原码,反码,补码相同
负数的反码:反码,人如其名,反码是负数的原码除了符号位,之外的所有比特位都变成相反的数,0变1,1变0
负数的补码:就是在反码的前提下加1,负数是用反码进行存储和运算的
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