c语⾔异或_C语⾔位逻辑运算符的四种逻辑:取反,并,或,
异或
4个按位逻辑运算符都⽤于整型数据,包括char。之所以叫作按位(bitwi)运算,是因为这些操作都是针对每⼀个位进⾏,不影响它左右两
边的位。不要把这些运算符与常规的逻辑运算符(&&、||和!)混淆,常规的逻辑运算符操作的是整个值。
1.⼆进制反码或按位取反:~
⼀元运算符~把1变为0,把0变为1。如下例⼦所⽰:
~(10011010)//expression(01100101)//resultingvalue
假设val的类型是unsignedchar,已被赋值为2。在⼆进制中,00000010表⽰2。那么,~val的值是11111101,即253。注意,该运
算符不会改变val的值,就像3*val不会改变val的值⼀样,val仍然是2。但是,该运算符确实创建了⼀个可以使⽤或赋值的新值:
newval=~val;printf("%d",~val);
如果要把val的值改为~val,使⽤下⾯这条语句:
val=~val;
2.按位与:&
⼆元运算符&通过逐位⽐较两个运算对象,⽣成⼀个新值。对于每个位,只有两个运算对象中相应的位都为1时,结果才为1(从真/假⽅⾯
看,只有当两个位都为真时,结果才为真)。因此,对下⾯的表达式求值:
(10010011)&(00111101)//expression
evaluatestothefollowingvalue:
(00010001)//resultingvalue
C有⼀个按位与和赋值结合的运算符:&=。下⾯两条语句产⽣的最终结果相同:
val&=0377;val=val&0377;
3.按位或:|
⼆元运算符|,通过逐位⽐较两个运算对象,⽣成⼀个新值。对于每个位,如果两个运算对象中相应的位为1,结果就为1(从真/假⽅⾯看,
如果两个运算对象中相应的⼀个位为真或两个位都为真,那么结果为真)。因此,对下⾯的表达式求值:
(10010011)|(00111101)//expression
除了编号为6的位,这两个运算对象的其他位⾄少有⼀个位为1,得:
(10111111)//resultingvalue
C有⼀个按位或和赋值结合的运算符:|=。下⾯两条语句产⽣的最终作⽤相同:
val|=0377;val=val|0377;
4.按位异或:^
⼆元运算符逐位⽐较两个运算对象。对于每个位,如果两个运算对象中相应的位⼀个为1(但不是两个为1),结果为1(从真/假⽅⾯看,如果
两个运算对象中相应的⼀个位为真且不是两个为同为1,那么结果为真)。因此,对下⾯表达式求值:
(10010011)^(00111101)//expression
编号为0的位都是1,所以结果为0,得:
(10101110)//resultingvalue
C有⼀个按位异或和赋值结合的运算符:^=。下⾯两条语句产⽣的最终作⽤相同:
val^=0377;val=val^0377;
本文发布于:2022-12-07 03:28:53,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/57096.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |