汉扬编程 编程大纲 (c语言取反运算)C语言位逻辑运算符的四种逻辑:取反,并,或,异或

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

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

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

1.二进制反码或按位取反:~一元运算符~ 把1变为0,把0变为1。如下例子所示:

~(10011010)  // expression (01100101)  // resulting value假设val的类型是unsigned char,已被赋值为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) // expressionevaluates to the following value:

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

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

(10010011) | (00111101) // expression除了编号为6的位,这两个运算对象的其他位至少有一个位为1,得:

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

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

(10010011) ^ (00111101) // expression编号为0的位都是1,所以结果为0,得:

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

val ^= 0377;val = val ^ 0377;

C语言中位运算异或“∧”的作用

1.概念异或运算符"∧"也称XOR运算符。它的规则是若参加运算的两个二进位同号,则结果为0(假);异号则为1(真)。即 0∧0=0,0∧1=1, 1^0=1,1∧1=0。

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

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

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

2.应用(1)使特定位翻转

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

比如:01111010,想使其低4位翻转,即1变为0,0变为1。可以将它与00001111进行∧运算,即

结果值的低4位正好是原数低4位的翻转。要使哪几位翻转就将与其∧运算的该几位置为1即可。这是因为原数中值为1的位与1进行∧运算得0,原数中的位值0与1进行∧运算的结果得1。

(2)实现两个值的交换

通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。例如交换两个整数a=3,b=4的值,可通过下列语句实现:

a=a∧b;

b=b∧a;

a=a∧b;

#include <stdio.h>void main(){ int a=3,b=4; a=a^b; printf("first value %d\\n",a); b=b^a; printf("second value %d\\n",b); a=a^b; printf("third value %d\\n",a);

————————————————

版权声明:本文为CSDN博主「霁风AI」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:://blog.csdn.net/wwt18811707971/article/details/78291490

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/6502.html

知乎神回复:英语对程序员有多重要?看看这个简单粗暴的回答

c语言使用递归方法求阶乘n

发表评论

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

返回顶部