c++ 异或运算,c++与或非运算符

c++ 异或运算,c++与或非运算符,C的|、||、&、&&、异或、~、!运算符

本文主要介绍C的|||,异或,~,运营商,有需要的朋友可以参考一下。

位运算位运算的运算分量只能是整数或字符数据。位运算将运算对象视为由二进制组成的位串信息,逐位完成指定的运算,得到位串信息的结果。

位运算符有:

(按位AND)、|(按位OR)、(按位XOR)、~(按位反转)。其中,按位求反算子为单目算子,其他为双目算子。位运算符的优先顺序从高到低依次为~、和|,其中~的组合方向是从右到左,优先顺序高于算术运算符,其他运算符的组合方向是从左到右,优先顺序低于关系运算符。

(1)按位AND运算符()

按位AND运算按照以下规则计算两个运算分量对应的位:0 0=0,0 1=0,1 0=0,1 1=1。即同样的位为1,结果为1,否则结果为0。例如,如果3的内部表示形式是00000115,5的内部表示形式是00000101,则35的结果是00000001。按位AND运算有两种典型的用法。一种是取某个位串信息的一些位,比如下面这段代码截取X的最低7位:x 0177。第二种是保留变量的一些位,其余的位置都是0。比如下面这段代码让x只保留最低的6位:x=x 077。对于上面的用法,必须先设计一个常数,只有需要的位是1,不需要的位是0。将它与指定的位字符串信息进行按位AND运算。

(2)按位或运算符(|)

按位“或”运算按照以下规则计算两个运算分量对应的位:0 | 0=0,0 | 1=1,1 | 0=1,1 | 1=1,即只要一位为1,结果为1,否则为0。例如,023 | 035产生037。按位“或”运算的典型用法是将位串信息的某些位置设置为1。如果要获得的最右边的4是1,并且其他位与变量J的位相同,则可以使用逻辑OR运算017|j。把这个结果赋给变量J,可以写成:J=017 | J。

(3)按位异或运算符()

按位异或运算,两个运算分量的对应位按以下规则计算:0 0=0,0 1=1,1 0=1,1 1=0,即对应位的值相同,结果为0,不同的结果为1。例如,013 035导致026。异或运算是指找出两个运算分量对应的位值是否不同。差为1,同为0。逐位XOR运算的典型用法是找到一个位串信息的一些位的倒数。如果要对整数变量j的最右4位的信息求逆,可以通过逻辑异或运算017^j得到j的最右4位的信息的逆,也就是原本为1的那位,结果为0,结果为1。

(4)按位求反运算符(~)

逐位求逆是单目运算,用来寻找一个位串信息的逐位求逆,即哪些位为0,结果为1,哪些位为1,结果为0。比如~7的结果是0xfff8。

逆运算通常用于生成独立于系统实现的常数。如果变量x的最低6位设置为0,其余位保持不变,则可以使用代码x=x ~077。以上代码与整数x是用2字节还是4字节实现无关。

当两个长度不同的数据进行位运算时(例如long数据和int数据),两个运算组件的右端对齐进行位运算。如果短数为正,则高数用0填充;如果短数字是负数,则高数字用1填充。如果short是无符号整数,高位总是用0填充。

位操作用于操作位串信息以获得位串信息结果。比如下面的代码可以去掉整型变量k的位串信息中最右边的1的信息位:((k-1) k) k。

移位运算移位操作用于将整数或字符数据作为二进制信息字符串进行移动。有两个运算符:(左移)和(右移)移位运算是双目运算,有两个运算分量,左分量是移位数据对象,右分量的值是移位位数。移位运算将左运算分量视为二进制组成的位串信息,将其向左或向右移位,得到新的位串信息。移位运算符的优先级比算术运算符低,比关系运算符高,组合方向是从左到右。(1)左移运算符()左移运算将一个位串信息向左移动指定的位,右端空出的位补0。比如0142,结果是060,也就是48。向左移动时,空出的右端补0,左端移出的位的信息丢弃。在二进制数运算中,如果信息没有因移动而丢失,那么每左移一位就相当于乘以二。如果4是2,结果是16。(2)右移位运算符()右移位运算将一个位串的信息向右移位指定的位,右端移出的位的信息被丢弃。例如122,结果是3。与左移相反,对于小整数,每右移1位相当于除以2。向右移动时,需要注意符号位问题。对于无符号数据,当向右移动时,左端空出的位将补0。对于有符号的数据,如果移位前符号位为0(正数),左端也补0;如果移位前符号位为1(负数),则左端补0或1,这取决于计算机系统。对于负数的右移,补0的系统称为“逻辑右移”,补1的系统称为“算术右移”。下面的代码可以解释读者的计算机系统采用的右移方法:printf ('%d \ n \ n ',-24);如果输出结果为-1,则采用算术右移;如果输出是大整数,则是逻辑右移。移位操作和位操作的结合可以实现许多与位串操作相关的复杂计算。设变量的位从右到左依次编号,从0到15,关于指定位的表达式为不超过15的正整数。以下代码的含义如其右侧的注释所示:~ (~ 0n) (x (1p-n)) ~ (~ 0n) new |=((旧行)1)(15k)s=~(1j)for(j=0;((1j)s)==0;j);==========================================================在系统软件中,经常需要处理二进制位的问题。c语言提供了六位运算符。这些运算符只能用于整数操作数,即有符号或无符号的char、short、int和long类型。

C语言提供的位运算符列表:

运算符含义描述按位and如果对应的两个二进制位都为1,则该位的结果值为1,否则为0|按位or如果对应的两个二进制位中有一个为1,则该位的结果值为1。按位异或如果参与运算的两个二进制位相同,则为0,否则为1~反转~是一元运算符,用于将一个二进制数按位反转,即变0。左移1到0用于将一个数的所有二进制位左移N位,右补0。将一个数的所有二进制位右移N位,移至右端的低位被丢弃。对于无符号数,高位由0组成。

1、“按位与”运算符()

逐位and是指根据二进制位对参与运算的两个数据进行“与”运算。如果两个相应的二进制位都是1,则该位的结果值是1;否则为0。这里1在逻辑上可以理解为真,0在逻辑上可以理解为假。根据按位与实际和逻辑“与”的运算规则。逻辑AND要求在结果为真之前所有操作数都为真。如果a=真,b=真,那么AB=真。比如35 ^ 3的二进制码是11(2)。(为了将十进制与其他十进制区分开来,本条规定所有非十进制数据都要加括号,括号中标明十进制,二进制标为2。)内存中数据存储的基本单位是字节,一个字节由8位组成。比特是用来描述计算机数据量的最小单位。在二进制系统中,每个0或1都是一位。把11(2)补进一个字节,就是0000011 (2)。5的二进制码是101(2),补进一个字节就是000000101(2)按位and运算:0000011(2)00000101(2)00000001(2)可见35=1c语言码:# includes stdio . hmain(int b=5;printf('%d ',ab);}按位AND的使用:(1)清零如果要清零一个存储单元,即使它的二进制位都是0,只要找一个二进制数,其中每个位满足以下条件即可:

原号码中的位为1,新号码中对应的位为0。然后,两者进行操作,就可以达到清场的目的。例:原数为43,即00101011(2),再找一个数,设为148,即10010100(2),进行按位与运算:001010100 (2) 0000000 (2) C语言源代码:int b=148printf('%d ',ab);}(2)取一个数中的某些指定位。如果有一个整数A (2个字节),如果要取低位字节,只需要将A与8个1按位and即可。a 00101100 101100 b 0000000 111111 c 000000 101100(3)保留指定位:与一个数进行按位与运算,该位取1。比如:有一个数字84,也就是01010100(2),你想从

c语言源代码:# include stdio . hmain(){ int a=84;int b=59printf('%d ',ab);}

2.按位或运算符(|)

只要两个相应的二进制位之一为1,该位的结果值就是1。用逻辑或者操作的话说,一个道理是真的。比如:60(8)|17(8),八进制60和八进制17是按位或。0110000 | 000011110011111c语言源代码:# include stdio . hmain(){ int a=060;int b=017printf('%d ',a | b);}应用:按位或运算常用于将一个数据的某些位设置为1。例如,如果要将一个数的低4位改为1,只需将A与17(8)进行按位或运算。

3.交换两个没有临时变量的值。

例如:A=3,即11(2);B=4,即100(2)。要交换A和B的值,可以使用下面的赋值语句:A=AB;b=ba;a=ab;A=011 (2) () B=100 (2) A=111 (2)(由于A B,A变成了7) () B=100 (2) B=011 (2) (B )

A=100 (2)(由于A B,A变成了4)等价于以下两步:执行前两条赋值语句:“A=AB;”和“b=ba;”相当于b=b(ab)。然后执行第三个赋值语句:A=A B .由于A的值等于(A B),b的值等于(b a b),

所以相当于a=a b b a b,即a的值等于a a b b,等于B.是不是很神奇?c语言源代码:

复制代码如下:# includes stdio . hmain(){ int a=3;int b=4;a=a^b;b=b^a;a=a^b;printf('a=%d b=%d ',a,b);}

4.“否定”运算符(~)

他是一元运算符,用来求整数的二进制补码,即操作数的每个二进制位上的1都变0,0变1。比如:~77(8)源代码:# include stdio . hmain(){ int a=077;printf('%d ',~ a);}

5、左移运算符()

左移运算符用于将一个数的每一位左移若干位,移动的位数由右操作数指定(右操作数必须为非负。

值),右边的空位用0填充,高位溢出到左边就丢弃。例如,将A的二进制数左移2位,将右边的空位填充0,丢弃左边的溢出位。如果a=15,即00001111(2),则向左移动2。

获取0011100 (2)。源代码:# include stdio . hmain(){ int a=15;printf('%d ',a2);}左移1位相当于数字乘以2,左移2位相当于数字乘以2 * 2=4,15 <<2=60,即乘以4。但这个结论仅适用于此

当数字向左移动时,溢出并丢弃的高位不包含1。假设一个字节(8位)用于存储一个整数。如果A是一个无符号整数变量,当A=64时,它向左溢出一位。

当它左移2位时,溢出的高位包含1。

6、右移运算符()右移运算符用于将一个数的每个二进制位右移若干位,移动的位数由右操作数指定(右操作数必须为非负。

值),移到右端的低位被丢弃,对于无符号数,高位用0填充。对于有符号的数字,有些机器会检查左边空的部分。

用符号位填充(即“算术移位”),其他机器用0填充左边空的部分(即“逻辑移位”)。充满

含义:对于无符号数,右移时左高位移至0;对于有符号值,如果原始符号位为0(数字为正),则左侧也会移位。

输入0。如果符号位最初是1(即负数),左侧将被移位为0或1,这取决于所使用的计算机系统。一些系统进入0,一些

系统进入1档。0的移位称为“逻辑移位”,即简单移位;1称为“算术移位”。例:A的值是八进制数113755: a:1001011111101101(用二进制表示)a1: 0100111110110(逻辑右移时)A1: 11001111110110(算术右移时)。在一些系统中,A1得到八进制数。Turbo等一些c。

编译时采用算术右移,即有符号数右移时,如果符号位本来是1,则左移到高位的位是1。源代码:# includesdio . hmain(){ int a=0113755;printf('%d ',a1);}

7、位运算赋值运算符

位运算符和赋值运算符可以构成复合赋值运算符。例:=,|=,=,=例:a=b等于a=a b a=2等于a=a 2

C XOR运算符:AND运算:两者都为1,否则为0。

11=1, 10=0, 01=0, 00=0

Or运算:|两者都是0,否则就是1 1|1=1,1|0=1,0|1=1,0|0=0。

非运算:~ 1取0,0取1 ~1=0,~0=1 ~(10001)=01110

异或运算等于0,差为1 1 1=0,1 0=1,0 1=1,0 0=0。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: