运算符
简单汇总一下简单的运算符,还有些运算符没提及
算术运算符
包括+(加法) -(减法) (乘法) /(除法) %(求余)
ps:求余两边必须是整数
求余运算的结果符号取决与前一操作数的符号
#include <stdio.h>
int main()
{
printf("%d %d %d %d",3%2,-3%2,3%-2,-3%-2);
return 0;
}
运算结果为 1 -1 1 -1
关系运算符
<(小于) <=(小于等于) >(大于) >=(大于等于) ==(等于) !=(不等于)
#include <stdio.h>
int main()
{
int a=2,b=3;
printf("%d\n",(a<b));
printf("%d\n",(a<=b));
printf("%d\n",(a>b));
printf("%d\n",(a>=b));
printf("%d\n",(a!=b));
printf("%d\n",(a==b));
return 0;
}
运算结果为 1 1 0 0 1 0
所以当比较结果成立时,结果为1
当比较结果不成立时,结果为0
逻辑运算符
!(非) &&(与) ||(或)
优先级:!>&&>||
综合性:自左向右
!是其中唯一的单目运算符,其他则为双目运算符
#include <stdio.h>
int main()
{
int a,b,c,d;
a=!1,b=!0,c=a&&b,d=a||b;
printf("%d %d %d %d",a,b,c,d);
return 0;
}
运算结果为 0 1 0 1
在c语言中,逻辑运算符的结果0表示假,1表示真,逻辑运算中非0表示真,0表示假;
!的真代表假,反之是真; &&代表两个数有一个为假或两个为假,则结果为假,||代表两个数有1个真或2个为真,则结果为真;
条件运算符
?:(三目运算符)
求两数之间的最小值,就可以运用到(?:)
#include <stdio.h>
int main()
{
int a,b,c;
scanf_s("%d %d",&a,&b);
c=a>b?b:a;
printf("两者之间最小值是%d",c);
return 0;
}
scan_s是由于visual stdio2022在ANSI C中没有scanf_s(),只有scanf(),但是scanf()在读取时不检查边界,所以可能会造成内存泄露。于是Microsoft公司在VS中提供了scanf_s(),如果想继续使用scanf这个不安全的函数以下方法可以解决,或者在文件顶部添加代码:#pragma warning(disable:4996) 即可
优先级
所占字节越多,优先级越高,比如double占8个字节最多,char占一个字节最少
同运算转换一样,就是数值存储少的向多的转换
位运算符
&(按位与)
|(按位或)
前面两个都是将两个运算量对应的二进制逐一按位进行逻辑“于” “或”进行运算
如图;3(2的0次方+2的1次方) 和5(2的0次方+2的2次方)进行“与”运算
00000011
&00000101
所以结果应该为00000001 所以表达结果是1(或同理按照或的运算规则)
^(按位异或)
相异为真,相同为假
~(按位取反----单目运算符,也称一元运算符)
比如: ~3 如下图
~00000011
11111100(取反后)
(补码)-1111100
-0000011
-0000100
ps:取反后如果开头数字为1的,就是负数,负数要以补码的形式存在,所以要对取反后的负数,进行每位(开头改为负号)取反 末位加1(末位+1,如果原来末位是1的话,就会进1,如同倒二位也是1,所以再进1,倒三位为0,所以变成1,结果为-0000100,所以为-4
<<(左移)
需要两个整数运算量参与,比如a<<n,就是a按照二进制向左移动n位,最高n位舍弃,最低n位用0补齐
>>(右移)
同左移,但是如果运算量有符号需要补齐符号位,无符号的补0
今天的分享就到此结束,感兴趣的小伙伴欢迎在评论区和小编一起讨论