C语言位逻辑运算符的四种逻辑:取反,并,或,异或

C语言位逻辑运算符的四种逻辑:取反,并,或,异或之所以叫作按位运算 是因为这些操作都是针对每一个位进行 不影响它左右两边的位 二进制反码或按位取反

欢迎大家来到IT世界,在知识的湖畔探索吧!

C语言位逻辑运算符的四种逻辑:取反,并,或,异或



欢迎大家来到IT世界,在知识的湖畔探索吧!

4个按位逻辑运算符都用于整型数据,包括char。之所以叫作按位(bitwise)运算,是因为这些操作都是针对每一个位进行,不影响它左右两边的位。不要把这些运算符与常规的逻辑运算符(&&、||和!)混淆,常规的逻辑运算符操作的是整个值。

1.二进制反码或按位取反:~

一元运算符~ 把1变为0,把0变为1。如下例子所示:

~()  // expression (0)  // resulting value

欢迎大家来到IT世界,在知识的湖畔探索吧!

假设val的类型是unsigned char,已被赋值为2。在二进制中,00000010表示2。那么,~val的值是,即253。注意,该运算符不会改变val的值,就像3 * val不会改变val的值一样,val仍然是2。但是,该运算符确实创建了一个可以使用或赋值的新值:

欢迎大家来到IT世界,在知识的湖畔探索吧!newval = ~val; printf("%d", ~val); 

如果要把val的值改为~val,使用下面这条语句:

val = ~val;

2.按位与:&

二元运算符&通过逐位比较两个运算对象,生成一个新值。对于每个位,只有两个运算对象中相应的位都为1时,结果才为1(从真/假方面看,只有当两个位都为真时,结果才为真)。因此,对下面的表达式求值:

欢迎大家来到IT世界,在知识的湖畔探索吧!() & (00) // expression

evaluates to the following value:

(00010001)               // resulting value

C有一个按位与和赋值结合的运算符:&=。下面两条语句产生的最终结果相同:

欢迎大家来到IT世界,在知识的湖畔探索吧!val &= 0377; val = val & 0377;

3.按位或:|

二元运算符|,通过逐位比较两个运算对象,生成一个新值。对于每个位,如果两个运算对象中相应的位为1,结果就为1(从真/假方面看,如果两个运算对象中相应的一个位为真或两个位都为真,那么结果为真)。因此,对下面的表达式求值:

() | (00) // expression

除了编号为6的位,这两个运算对象的其他位至少有一个位为1,得:

欢迎大家来到IT世界,在知识的湖畔探索吧!()             // resulting value

C有一个按位或和赋值结合的运算符:|=。下面两条语句产生的最终作用相同:

val |= 0377; val = val | 0377;

4.按位异或:^

二元运算符逐位比较两个运算对象。对于每个位,如果两个运算对象中相应的位一个为1(但不是两个为1),结果为1(从真/假方面看,如果两个运算对象中相应的一个位为真且不是两个为同为1,那么结果为真)。因此,对下面表达式求值:

欢迎大家来到IT世界,在知识的湖畔探索吧!() ^ (00) // expression

编号为0的位都是1,所以结果为0,得:

()               // resulting value

C有一个按位异或和赋值结合的运算符:^=。下面两条语句产生的最终作用相同:

欢迎大家来到IT世界,在知识的湖畔探索吧!val ^= 0377; val = val ^ 0377;

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/100890.html

(0)
上一篇 3天前
下一篇 3天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信