目录
3.位操作符(& ^ | ~是补码运算,且必须操作的是整数)
分类
1.算术操作符
+ - * / %
操作数1+操作数2 操作数1-操作数2 操作数1*操作数2 操作数1/操作数2 操作数1%操作数2
即四则运算和%
注意
除法操作符/(正斜杠)介绍
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
float a = 9 / 2;
printf("%f\n", a);
printf("%f\n", 9 / 2.0);
}
结果不同

9/2=4……1(相当于直接去除小数部分打印整数部分)
9/2.0=4.5(2.0告诉计算机保留小数)
%f和%lf默认情况下打印小数点后六位
总结
除号的两端如果是整数,执行的是整数除法,得到的结果也是整数
如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数,这时 C 语言就会进行浮点数除法
取模操作符%介绍
%取模=取余数 9%2=1
注意
%只能用于整数,负数求模的结果的正负号由第一个运算数的正负号决定
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
printf("%d\n", -5 % 4);
printf("%d", 5 % -4);
return 0;
}
结果:
2.移位操作符
>> <<
<<是左移二进制位(箭头指向左侧)
>>是右移二进制位(箭头指向右侧)
代码示例
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a =10;
int b = 0;
b = a << 1;
printf("%d\n", b);
}

注意:a<<1,a左移1位,但a的值没有变;a<<=1,a左移1位,a的值变了
原因:

1010-->10100(默认补0)
注意:C语言的移位是逻辑移位还是算术移位取决于编译器,但大部分编译器(如VS 2022 )选择算术移位
有关移位的分类讲解见《计算机科学导论 第三版》第53~54页
警告:1.禁止移动负数位(例如<< -1是错误的) 2.禁止移动的位数超过最大位数
a>>-3(错误);a<<100(若最大位数是32位,100>32,错误)
有关sizeof函数的介绍在3.【C语言】内置数据类型
同理>>反过来
重要总结
1.<<:无论算术左移还是逻辑左移,都是左边抛弃,右边补0
2.>>:算术右移左边用0填充,右边丢弃;逻辑右移:左边用原该值的符号位填充,右边丢弃
3.移位是对补码操作
3.位操作符(& ^ | ~是补码运算,且必须操作的是整数)
位:二进制位
复习:《计算机科学导论 第三版 》第49~53页
是位对之间的运算
&按位与(AND运算)
x==0或1,x AND 0-->0 和 0 AND x-->0
^按位异或(XOR运算即半加运算)
x==0或1 x XOR 1-->NOT x 和 1 XOR x-->NOT x
|按位或(OR运算)
x==0或1 x OR 1-->1 和 1 OR x-->1
~按位取反(NOT运算)
x==0, NOT x-->1
x==1, NOT x-->0
4.赋值操作符
连续赋值(从右向左依次赋值):a=b=c+1
复合赋值:a+=3;(自增)b-=5;(自减)
a=a+b简写为a+=b
a=a-b简写为a-=b
a=a%b简写为a%=b
a=a*b简写为a*=b
……以此类推
5.单目操作符
有单就有双
a+b; //+有两个操作数,+是双目操作符
所以单目操作符只有一个操作数
介绍:
!逻辑取反
0表示假,非0表示真

!a 如果a是假,!a为真;如果a为真,!a为假
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a =0;
printf("%d\n", !a);
}
结果默认输出1
!a常用于if语句的使用
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a=0;
scanf("%d", &a);
if (!a)
printf("A");
else
printf("B");
return 0;
}
-负值
-2
+正值
+3
sizeof 计算数量类型或变量的大小
764

被折叠的 条评论
为什么被折叠?



