龙空技术网

C语言按位与、或、异或,很简单,就是世界里的黑和白!好和坏

远峰linux编程学堂 405

前言:

目前姐妹们对“linux与c语言”大体比较看重,各位老铁们都需要知道一些“linux与c语言”的相关内容。那么小编同时在网上搜集了一些有关“linux与c语言””的相关内容,希望朋友们能喜欢,同学们一起来学习一下吧!

按位与、或、异或运算符

在计算机内存中,数据是以二进制的形式存储,每一个位存放一个0或1的二进制数值。这里介绍的按位与、或、异或运算,就是针对二进制进行操作。

例如“按位与”运算,就是对二进制的数据位进行“与”运算。在数学中,定义了“与”运算的算术规则,使用符号“&”表示“与”运算。例如a & b这样的表达式,如果a和b对象都为1的时候,表达式的值才为1,只要a和b对象有一个值是0,则表达式的值是0。那么,我们可以归纳为如下表。

与运算规则表

操作数a的值

操作数b的值

与运算表达式

表达式的值

0

0

a & b

0

0

1

0

1

0

0

1

1

1

可以看到,对于 a&b这样的表达式,只要a和b中有一个值为0,则表达式的值就为0。只有a和b都是1的时候,表达式的结果才为1。

对于“或”运算的算术规则,使用符号“|”符号表示“或”运算。例如a | b这样的表达式,如果a和b对象都是0的时候,表达式的值才为0,只要a和b对象有一个值是1,则表达式的值就是1。那么,我们可以归纳为如下表。

或运算规则表

操作数a的值

操作数b的值

与运算表达式

表达式的值

0

0

a | b

0

0

1

1

1

0

1

1

1

1

可以看到,对于 a | b这样的表达式,只要a和b中有一个值为1,则表达式的值就为1。只有a和b都是0的时候,表达式的结果才为0。

对于“异或”运算的算术规则,使用符号“^”符号表示“异或”运算。例如a ^ b这样的表达式,如果a和b对象全部相同,即全部是0或者全部是1的时候,表达式的值才为0;只要a和b对象不相同,则表达式的值就是1。那么,我们可以归纳为如下表。

异或运算规则表

操作数a的值

操作数b的值

与运算表达式

表达式的值

0

0

a ^ b

0

0

1

1

1

0

1

1

1

0

可以看到,对于 a ^ b这样的表达式,只有a和b的值都是0或者都是1的时候,表达式的值就为0。如果a和b的值不相同,则表达式的结果为1。如下是测试的例子:

测试程序运行的结果如下:

通过测试例子,我们可以知道“按位与、或、异或”运算,就是把二进制数据,按位进行数学的“与、或、异或”操作。最终,表达式的值是按位运算的结果。

逻辑与、或运算符

在C语言中,定义了“逻辑与”和“逻辑或”的操作。逻辑与运算符是“&&”,可以有表达式“a && b”,那么,当a和b的值都是非0值的时候,表达式的值才为1;如果a和b的值中,有一个值为0,则表达式的值就是0。那么,我们可以归纳逻辑与的操作如下表。

逻辑与运算规则表

操作数a的值

操作数b的值

与运算表达式

表达式的值

0

0

a && b

0

0

非0

0

非0

0

0

非0

非0

1

可以看到,“逻辑与”的操作与“按位与”操作很相似。但是,“按位与”操作的是二进制中的一个位数据,而这里的“逻辑与”操作,操作的是一个数值,该操作数值只有0和非0(非0可以是正数和负数)这样的状态。

同理,“逻辑或”的操作与“按位或”的操作也很相似。“按位或”操作的是二进制中的一个位数据,“逻辑或”操作的是一个数值。操作数只有0和非0的 状态。我们可以归纳逻辑或的运算如下表。

逻辑或运算规则表

操作数a的值

操作数b的值

与运算表达式

表达式的值

0

0

a || b

0

0

非0

1

非0

0

1

非0

非0

1

可以看到,当a和b都是0值的时候,表达式的值才为0;如果a和b中有一个数为非0值,则表达式的值为1。如下测试的例子:

测试运行的结果如下:

可以看到,逻辑与和逻辑或运算符,可以操作变量,组成一个表达式。

标签: #linux与c语言