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。