C语言运算符优先级
来源:互联网 发布:mac number 求和 编辑:程序博客网 时间:2024/06/06 05:40
// 运算符
1. and运算(&)
通常用于二进制取位操作,将运算符两边数字转换成二进制进行运算,相同的位数均为1时结果才为1,否则结果为0.
int a1 = 6; int b1 = 10;
printf("%d\n",a1&b1);
2. or运算(|)
采用二进制位数进行运算,相同的位数只要有一个为1,结果为1,否则为0.
int a2 = 4; int b2 = 2;
printf("%d\n",a2|b2);
3. xor运算(^)
采用二进制位数进行运算,相同位数数字相同为1,不同为0.
int a3 = 4; int b3 = 2;
printf("%d\n",a3^b3);
// 一个数与同一个数异或两次,结果为本身
// 交换值
int x; int y;
x = x ^ y;
y = x ^ y;
x = x ^ y;
// 逆运算
// 加法和减法互为逆运算,可以把加法减法替换为异或
x = x + y;
x = x - y;
y = x - y;
// 4. not运算(~)
// 针对无符号整型,直接把内存中的二进制数1全部取反
int m = 10;
printf("%d\n",~m);
// 5. shl运算(<<)
// a shl b就表示把a转为二进制后左移b位(在后面添b个0),例如4的二进制为0100,而10000转成十进制是16,4 shl 2 = 16。
int a = 4; int b = 2;
printf("%d\n",a<<b);
// 可以看出,a shl b的值实际上就是a乘以2的b次方,因为在二进制数后添一个0就相当于该数乘以2。
// 6. shr运算(<<)
// a shr b就表示把a转为二进制后右移b位(在后面减b个0)
int i = 16; int j = 2;
printf("%d\n",i>>j);
// 可以看出,a shr b的值实际上就是a除以2的b次方
// 优先级
// 1.第1⃣️优先级: [], (), .(成员选择--对象), ->(成员选择--指针)
// 相同级别时从左往右执行运算
// 2.第2⃣️优先级: -(负号运算符), ++, --, *(指针运算符), &(取地址运算符), ~(按位取反运算符),!(逻辑非运算符), sizeof, (类型转换运算符)
// 相同级别时从右往左执行运算
// 3.第3⃣️优先级: *(乘), /(除), %(取余)
// 相同级别时从左往右执行运算
// 4.第4⃣️优先级: +, -
//相同级别时从左往右执行运算
int c = 4; int d = 8;
int s =sizeof!c * d;
printf("%d\n",c+d*c);
printf("%lu\n",sizeof(!c));
printf("%d\n",s);
5.第5⃣️优先级: <<(左移), >>(右移)
// 相同级别时从左往右执行运算
// int c = 8; int d = 2;
// int s =c<<(d+1);
// int m =(c+d)<<1;
// printf("%d\n",s);
// printf("%d\n",m);
// printf("%lu\n",sizeof c+d);
// 6.第6⃣️优先级: >, >=, <, <=
// 相同级别时从左往右执行运算
int x = 6;int y =10;int z = 0;
z = x > y + 4;
printf("%d\n",z);
z = x + 4 >= 2 + y ;
printf("%d\n",z);
// 7.第7⃣️优先级: ==, !=
// 相同级别时从左往右执行运算
int x = 6;int y =10;int z = 0;
z = x + 4 >= !2*x + y==1 ;
printf("%d\n",z);
// 8.第8⃣️优先级: &(按位与)
// 相同级别时从左往右执行运算
// 9.第9⃣️优先级: ^(按位异或)
// 相同级别时从左往右执行运算
// 10.第