运算符与表达式
运算符:赋值运算符、算术运算符、关系运算符、逻辑运算符
表达式:符号与操作数的组合
单等于 = (赋值符号)计算顺序:从右往左#include
int main() {
//我们声明了一个double类型的变量v月工资, 然后把3200赋值给v月工资
double v月工资 = 3200;
//我们声明了一个double类型的变量v总工资,然后把v月工资*2的总和,赋值给v总工资
double v总工资 = v月工资 * 2;
printf("%lf\n",v总工资);
return 0;
}
复合运算符:
#include
int main() {
//复合运算符
int v数字 = 8;
v数字 %= 5;
printf("%d\n",v数字);
return 0;
}
算术运算符可以进行算术运算一元运算符:++ -- (只操作一个变量)
二元运算符:+ - * / (同时操作多个变量)#include
int main() {
int v数字 = 5;
//如果是单元的v数字++,那就没有太大的问题
//但这个是在一个表达式中,就需要非常注意了。
int v结果 = v数字++;
//这里的v数字++是先把v数字的值赋值给“结果”,再运算v数字++
printf("结果 = %d\n", v结果);
int v数字2 = 5;
int v结果2 = ++v数字2;
//这里是先计算++v数字2,然后再把右边的值赋值给左边的:v结果2
printf("结果2 = %d\n",v数字2);
return 0;
}
关系运算符
关系运算符可以比较大小、高低、长短> 大于
>= 大于且等于
<= 小于且等于
== 恒等于(一定等于)
!= 不等于
等式成立返回1,不成立返回0。在C语言中真为1,假为0(需要引入stdbool.h)#include
int main() {
printf("6 > 9 吗?结果 = %d\n", 6 > 9);
printf("6
return 0;
}
逻辑运算符
与&& 或|| 非!(取反)
位运算符(选学,这个请到我的B站看一下进制转换的专题,更易懂)
这里计算2个二进制数:1001和1010 (十进制为:9和10)
特别提醒:0的值可为+0,也可为-0 二进制都为
所以不看符号位,负数的值会比正数+1,这点一定要想明白
二进制的数都是由正数转成的,所以计算的时候,要先转成正数再计算取反~
~127=-128
按位与:&
0&0=0; //同为0,就为0
1&0=0; //不相同,就为0
0&1=0; //不相同,就为0
1&1=1; //同为1,就为1
9&10=1001
& 1010
= 1000#include
int main() {
int a = 9 & 10;
printf("%d\n",a);
return 0;
}
按位或:|
0|0=0; //同为0,就为0
0|1=1; //不相同,就为1
1|0=1; //不相同,就为1
1|1=1; //同为1,就为1
9|10=1001
| 1010
= 1011#include
int main() {
int a = 9| 10;
printf("%d\n",a);
return 0;
}
按位取反:~
~1=0; //如为1,就为0
~0=1; //如为0,就为1
计算公式~n=-(n+1) //注意取反后,需要自-1, ~1=-(1+1)=-2
~9=0000 0000 0000 0000 0000 0000 0000 1001 //最为左边的二进制数为0就为正数,如果为1,就为负数
~ =1111 1111 1111 1111 1111 1111 1111 0110 //负数的二进制计算有点不同,需要先用正数计算出负数的二进制值,再取反得到正数
上面的值为-10 //如:~-2=1(人脑计算法:去除-号,再自身-1,就可以得到真正的数)
正数按位取反#include
int main() {
int a = ~9;
printf("%d\n",a);
return 0;
}
负数按位取反#include
int main() {
int a = ~-2;
printf("%d\n",a);
return 0;
}
-2由~1而来,所以先要把-2的二进制写出来
1 =0000 0000 0000 0000 0000 0000 0000 0001
~ =1111 1111 1111 1111 1111 1111 1111 1110
~-2=0000 0000 0000 0000 0000 0000 0000 0001 = 1
按位异或:^ (与'|'第4点不同)
0^0=0; //相同,就为0
1^0=1; //不相同,就为1
0^1=1; //不相同,就为1
1^1=0; //相同,就为0
9^10=1001
^ 1010
= 0011#include
int main() {
int a = 9^10;
printf("%d\n",a);
return 0;
}
二进制左移:<
9<<2=0000 0000 0000 0000 0000 0000 0000 1001 //先保存最左边的符号位0
<
int main() {
int a = 9<<2;
printf("%d\n",a);
return 0;
}
负数左移(一般是使用正数,负数会报警)
-9<<2=1111 1111 1111 1111 1111 1111 1111 0111 //先保留最左边的符号位1
=0000 0000 0000 0000 0000 0000 0000 1000 //然后转换成正数8
<
取反 =1111 1111 1111 1111 1111 1111 1101 1100 //最右边补上2个0#include
int main() {
int a = -9<<2;
printf("%d\n",a);
return 0;
}
二进制右移:>>正数右移
9>>2=0000 0000 0000 0000 0000 0000 0000 1001 //先保存最左边的符号位0
>> =0000 0000 0000 0000 0000 0000 0000 0010 //右移2位后,最左边2位补上符号位0
速记法:先把最右边的值改写为0,然后自身除2的n次幂
如 :0000 0000 0000 0000 0000 0000 0000 1000 =8
结果 :0000 0000 0000 0000 0000 0000 0000 0010 =8/2/2=2 //注:最左边补上符号位#include
int main() {
int a = 9>>2;
printf("%d\n",a);
return 0;
}
负数右移(一般是使用正数,负数会报警)
-9>>2=1111 1111 1111 1111 1111 1111 1111 0111 //先保留最左边的符号位1
=0000 0000 0000 0000 0000 0000 0000 1000 //然后转换成正数-9由~8而来,所以正数是8
>> =0000 0000 0000 0000 0000 0000 0000 0010 //向右边移动2位后,正数值为2,而原值是负数,所以~2=-3
结果 =1111 1111 1111 1111 1111 1111 1111 1101#include
int main() {
int a = -9 >> 2;
printf("%d\n", a);
return 0;
}
以上是二进制的位移运算,只是了解一下他的规则即可,如果将来不弄汇编,大可不必深究
【你乐科技版权】站内所发布的一切原创内容,转载请说明是由《你乐科技》发布,内容仅限用于学习和研究,不得用于商业或非法用途,否则,一切后果请用户自负。本站信息部分来自网络,版权争议与本站无关。您必须在下载后的24小时内,彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
邮箱地址:nilekeji@163.com
最后于 7月前
被酷乐Happy编辑
,原因: