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

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

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

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

负数的原码;将数字的第一位转化为二进制后,将第一个比特位变为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

相关文章
|
安全 C++
【C++11保姆级教程】移动构造函数(move constructor)和移动赋值操作符(move assignment operator)
【C++11保姆级教程】移动构造函数(move constructor)和移动赋值操作符(move assignment operator)
698 0
|
3月前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
38 0
|
6月前
|
算法 安全 程序员
【C++14 新特性 透明操作符】透视C++14透明操作符Functors:深入理解与实践
【C++14 新特性 透明操作符】透视C++14透明操作符Functors:深入理解与实践
156 3
|
6月前
|
算法 程序员 C语言
【C++ 运算符重载】深入理解C++迭代器中的前置与后置++操作符
【C++ 运算符重载】深入理解C++迭代器中的前置与后置++操作符
226 0
|
6月前
|
设计模式 存储 算法
【C++ 函数调用操作符】探究C++中的函数调用操作符 基础到高级应用
【C++ 函数调用操作符】探究C++中的函数调用操作符 基础到高级应用
331 0
|
6月前
|
存储 程序员 C++
C/C++ 内存分配 new 操作符:剖析new操作符的实现机制和使用技巧
C/C++ 内存分配 new 操作符:剖析new操作符的实现机制和使用技巧
130 0
|
6月前
|
C++
C++ operator关键字的使用(重载运算符、仿函数、类型转换操作符)
C++ operator关键字的使用(重载运算符、仿函数、类型转换操作符)
80 0
|
6月前
|
算法 编译器 C++
【C++11保姆级教程】深入浅出异常说明符、异常操作符和lambda表达式
【C++11保姆级教程】深入浅出异常说明符、异常操作符和lambda表达式
119 0
C++-string““s操作符C++-string““s操作符
C++-string““s操作符C++-string““s操作符
|
程序员 C++
C++11之显式转换操作符-explicit
C++11之显式转换操作符-explicit
114 0