+ - * / %
注意 / 操作符在有浮点数时的计算结果
int main() { float f1 = 7 / 2; float f2 = (float)7 / 2; float f3 = 7 / (float)2; float f4 = (float)(7 / 2); printf("%f\n", f1); printf("%f\n", f2); printf("%f\n", f3); printf("%f\n", f4); system("pause"); return 0; }输出结果如下: 注意 % 操作符的两个操作数必须为整数
int main() { int a = -1; //printf("%d\n", a); printf("%d\n", -10 % 3); printf("%d\n", 10 % -3); printf("%d\n", -10 % -3); printf("%d\n", 10 % 3); system("pause"); return 0; }输出结果如下:
<< 左移操作符 >> 右移操作符
左移操作符——左边抛弃、右边补0 右移操作符
逻辑移位 左边用0填充,右边丢弃算术移位 左边用原该值的符号位填充,右边丢弃& 按位与 | 按位或 ^ 按位异或 ——相同取0,相异取1
位操作符应用——求一个整数存储在内存中的二进制中1的个数
#include <stdio.h> int main() { int num = -1; int i = 0; int count = 0;//计数 while(num) { count++; num = num&(num-1); } printf("二进制中1的个数 = %d\n",count); return 0; }num = num&(num-1); 用来求二进制位有几个1
=
复合赋值符 += -= *= /= %= >>= <<= &= |= ^=
注意sizeof在编译期间只确定类型大小,不参与运算
int main() { int arr[10] = {0}; int a = -1; printf("%d\n",sizeof(a++)); printf("%d\n", a); system("pause"); return 0; }输出结果a还是-1
&& 逻辑与 || 逻辑或
表达式1 && 表达式2 && 表达式3 表达式1为真再执行表达式2,否则不执行 表达式1和表达式2都为真,则执行表达式3,否则不执行
int main() { int i = 0; int a = 1; int b = 0; int c = 2; i = a++ && b++ && c++; printf("%d %d %d", a, b, c); system("pause"); return 0;