龙空技术网

C语言加减乘除运算,逻辑位运算是否高效?

远峰linux编程学堂 235

前言:

当前同学们对“c语言提供的三种逻辑运算符”可能比较珍视,你们都需要分析一些“c语言提供的三种逻辑运算符”的相关内容。那么小编同时在网络上汇集了一些关于“c语言提供的三种逻辑运算符””的相关知识,希望你们能喜欢,我们快快来了解一下吧!

C语言提供的加减乘除运算符如同数学的加减乘除一样,是对数值的运算。例如:

int a = 1 + 2;

这一行代码中,涉及到2个运算符:

(1) 加法运算符“+”,对1和2数值进行数学的加法操作;

(2) 赋值运算符“=”,是把 1+2 表达式的运算结果,就是表达式的值赋给变量a;

如下是具体的测试例子:

测试运行结果如下:

可以看到,C语言中定义的加减乘除运算符,就是数学运算中的加减乘除操作。

3 小括号改变运算顺序

在数学运算中,我们可以通过“小括号()”来改变运算的顺序,这个方法,在C语言中同样适用,测试例子如下:

程序运行结果如下:

可以看到,我们通过小括号,把 1 + 2 * 5改为 (1 + 2)*5运算,那么,就优先运算小括号里面的操作。

逻辑取非和按位取非操作

C语言中提供了取非“!”运算符,而且,定义了“非0”的数值为“真”,“0”数值为“假”,那么,结合取非“!”运算符的操作有:

(1)“!真”结果为“假”;

(2)“!假”结果为“真”;

就是说,对应非0数值,如果使用“!”运算符操作,则结果为0;对于0数值,进行“!”运算符操作,结果为真。注意:C语言对“!”运算符操作结果为“真”的值使用1数值来表示。

逻辑取反“~”运算符,就对一个数值的二进制进行按位取非操作;原来为0的值,变为1,原来为1的值变为0。例如2这个数值,如果存储在1个字节的空间,那么,使用8位表示为:

0000 0010

按位取反之后,其值为:

1111 1101

此时,这个数值当作“有符号数”看待时,则最高位为符号位,符号位的值为1,那么,就表示负数。转换为十进制的过程是:数值位按位取反再加1。所以,对于 1111 1101这样数值,转换过程是:

(1) 数值位按位取反,得到 000 0010;

(2) 数值位再加1,得到 000 0011;

注意:对于负数的表示请参考“有符号数和无符号数”章节。

此时,就是表示-3这个数值。如下是一个测试的例子:

测试运行的结果如下:

可以看到,有a1这个变量,赋值为5,是一个非0值,其状态为“真”,那么,取“非”操作的结果是“假”,“假”这个结果用0数值表示。然后,把“假”这个结果赋给变量b1,那么,输出b1的值是0值。对于a2变量,赋值为0数值,是“假”的状态,然后,取“非”操作,状态变为“真”,在C语言中,使用1表示,所以,输出b2变量的值是0。

对于c1变量,赋值为2这个数值,然后,进行“取反”操作,就是所有的位都取反,最后赋给c2变量。所以,2这个数值的二进制是0000 0010,然后,每个位都取反,得到 1111 1101。那么,由于c2是char类型,这个char类型是一个有符号类型。所以,c2中存储的数据当作“有符号”数看待。那么,c2中存储的1111 1101数值当作有符号数看待,由于符号位是1,所以,表示为负数。把c2变量转换为十进制表示的过程是:

(1) 数值位按位取反,得到 000 0010;

(2) 数值位再加1,得到 000 0011;

最后,得到c2变量的数值是-3。

标签: #c语言提供的三种逻辑运算符