四⽬运算符号c语⾔,C语⾔的运算符
1 算术运算符
c语⾔中可以使⽤加减乘除(+,-,*,/)以及取余(%)这些操作符
注意点:
a、0不能做除数,不能对0进⾏取余,0.0可以做除数,结果是⽆穷⼤。
b、取余操作的两边必须是整数;
c、两个整数相除,结果取整数部分;
d、浮点数不能取余;
2 赋值操作符
赋值操作符(=)⽤于对变量赋值,左边必须是变量,右边是可以当成数字使⽤的内容,赋值操作符的优先级很低,但是⽐,优先级⾼。
多个赋值操作符从右向左计算。
复合赋值操作符(+=,-=,*=,/=),其优先级和赋值操作符的优先级⼀样。
swap.c
#include
int main() {
int num = 3, num1 = 7;
/*int num2 = 0;
num2 = num;
num = num1;
num1 = num2;*/
/*num = num + num1;
num1 = num - num1;
num = num - num1;*/
num = num - num1;
num1 = num + num1;
num = num1 - num;
printf("num是%d,num1是%d\n", num, num1);
return 0;
}
3 ⾃增⾃减运算符
⾃增,⾃减运算符(++,–),只能对变量进⾏操作,两种操作(前操作、后操作)的区别在于操作的时机,前操作的优先级⾮常⾼,后操作的优先级⾮常低
不要在⼀条语句中对同⼀个变量进⾏多次⾃增或⾃减运算
4 逻辑运算符
逻辑表达式的计算结果或者是真或者是假,c语⾔中⽤数字1表⽰真,数字0表⽰假 。
布尔类型⽤来表⽰真和假这两个内容,布尔类型的名称是bool。为了使⽤布尔类型,需要包含头⽂件stdbool.h,布尔类型只包含两个数字,true(代表真)和false(代表假)
逻辑操作符⽤来拼写逻辑表达式
所有整数都可以当逻辑表达式使⽤,0代表假,其他所有整数都代表真
求反(!)也是⼀个逻辑操作符
逻辑操作符的优先级低于算术操作符
两个逻辑操作符可以⽤来把两个简单的逻辑表达式合并成⼀个复杂的逻辑表达式,他们分别是&&(与)和||(或)
&&和||都具有短路特性(当前⼀个逻辑表达式可以决定整个表达式的计算结果时,后⼀个逻辑表达式根本就不会计算)
⼀般不要在逻辑表达式中对变量内容作修改
5 关系运算符
等于(==),不等于(!=),⼤于(>),⼩于(=)和⼩于等于(<=)
注意点:
在c语⾔中,如果进⾏⼤⼩判断i < j < k,这样写不是取j⼤于i⼩于k之间的数据,编译器认为,从左向右进⾏判断i < j,(1,0)⽤这个结果与k进⾏判断
i < j && j < k ———-正确的逻辑
不可将浮点变量⽤“==”或“!=”与任何数字⽐较。
浮点数不能直接⽐相等,计算机对浮点数进⾏计算的原理是只保证必要精度内正确即可,所以⼩数点最后有些位是不准确的。
要⽐较相等,不能直接⽤“==”来判断,只看两数差值在⼀定精度范围内,就可以认为相等。⽤fabs函数即可。
#include
逗号表达式的运算顺序
double fabs(double x);
Link -with -lm.
6 位运算符(针对⼆进制进⾏计算)
1 按位与(&)
0 & 0 0
1 & 1 1
0 & 1 0
3 & 5=0000 0011 & 0000 0101=0000 0001
按位与可以把某些⼆进制位清零
2 按位或(|)
0 | 0 0
1 | 1 1
1 | 0 1
3 | 5 = 0000 0011 | 0000 0101=0000 0111
按位或可以把⼀个数字的某些数位设置成1
3 按位异或(^)
按位异或:对应的⼆进制位相同为0,不同为1
0 ^ 0 0
1 ^ 1 0
1 ^ 0 1
3 ^ 5 = 0000 0011 ^ 0000 0101 =0000 0110
按位异或可以把某些数位求反(与1按位异或)
a、两个相同的数按位异或,结果为0
b、任何数与0取异或,结果都是其本⾝
int a = 10;b = 20;
a = a^b;
b = a^b;
a = a^b;
上⾯代码实现的是交换a,b两个变量中的数据
a = 10 ^ 2o
b = a ^ b = 10 ^20 ^20 = 10
a = a ^
b =10 ^20 ^ 10 =20
还可以通过加减运算,不引⼊第三个变量,交换两个数的值,但任何类型的变量,都有⼀个取值范围
int类型的取值范围(-2^31~2^31-1,负21亿到正21亿),a+b超过范围,则只会截取四个字节的数据,造成数据丢失4 按位求反(~)
把⼀个数字中的所有⼆进制数位求反
~3 = 1111 1100=0xfffffffc
7 三⽬运算符(条件运算符) ? :
三⽬运算符可以根据⼀个逻辑表达式从两个数值中选择⼀个作为结果
8 移位操作符:左移(<>)
左移固定在右边补0,如果⼀个数字向左移动n位,且有效数位没有损失,那么数字增⼤2的n次⽅
3 << 2 = 0000 0011 << 2 =0000 1100 = 12
12 >> 2 =0000 1100 >> 2 =0000 0011 = 3
⼀个数字右移,在左边的所有移后的空位上,补符号位,⽆符号数字右移左边补0
int num=0x8000000c >> 2 =0xe0000003
9 取地址操作符(&)
*操作符(指针运算符)可以根据变量的地址表⽰变量
10 逗号运算符
⽤于连接多个表达式:
表达式1,表达式2,…表达式n
a、顺序求值,会从左边第⼀个表达式开始,顺序向右计算各个表达式的值
b、逗号表达式的结果,是取其中最后⼀个表达式的值,即取表达式n的值
11 类型转换
隐式类型转换会把⼀个表达式中所有数字都转换成同⼀个类型,然后再进⾏计算。把占地⼩的数据转换成占地⼤的类型后再计算,占地同样⼤⼩的数据则把有符号数据转换成⽆符号数据。整数转换成浮点数。
隐式类型转换只是把原数据转换成某种新的同⼀形式⽤于计算,但并不会改变原来的数据。
强制类型转换可以把⼀个数字转换成另外⼀种类型使⽤,使⽤⽅法如下:
(char)100 表⽰把数字100当成char类型使⽤
强制类型转换过程中有可能造成数据的丢失 printf(“%d,%d”,300,(char)300);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论