系列连载
参考
注意,+ 是右结合的
“=” 具有左结合性,结果赋值给左边,eg x = y = z
等价于 x = (y = z)
#include "stdio.h"
void main()
{
printf("%d, %d\n", 20/7,-20/7);
printf("%d, %d\n", 20%7,-20%7);
printf("%f, %f\n", 20.0/7,-20.0/7);
}
output
2, -2
6, -6
2.857143, -2.857143
注意 % 不能作用在 double 上
运算符
算数运算符
+, -, *, /, %(取余)
注意 10.5%3 会报错,% 左右必须为整数
关系运算符
>, >=, <, <=, !=, ==
逻辑运算符
!, &&(且), ||(获)
先来个简单的
#include
int main(void)
{
int i = 10;
int k = 20;
int m;
m = (3 > 2) && (k = 5);
printf("k = %d, m = %d\n", k, m);
return 0;
}
输出为
k = 5, m = 1
把 m 的赋值语句改为 m = (3 > 2) && (k = 0);
结果为
k = 0, m = 0
把 m 的赋值语句改为 m = (1 > 2) && (k = 5);
结果为
k = 20, m = 0
哈哈哈,
&& 从左到右运行,左边的表达式为假,右边的表达式不会执行,k = 5 没有运行
把 m 的赋值语句改为 m = (1 > 2) || (k = 5);
k = 5, m = 1
把 m 的赋值语句改为 m = (3 > 2) || (k = 5);
k = 20, m = 1
|| 左边表达式是真的时候,右边不执行
赋值运算符
=, +=, *=, /=, -=
一些琐碎的运算符知识
自增[或者自减]
分类
异同
为什么会出现自增
学习自增要明白的几个问题
int m = i++ + ++i +i + i++
#include
int main(void)
{
int i = 3;
int j = 3;
int p,q;
p = ++i;
q = j++;
printf("i = %d, j = %d, p = %d, q = %d \n", i,j,p,q);
return 0;
}
output
i = 4, j = 4, p = 4, q = 3
#include
int main(void)
{
int i = (3,4,5,6);
printf("i = %d\n", i);
return 0;
}
output
i = 6
再看个比较有意思的
#include
int main(void)
{
int i;
int j = 2;
i = (j++,++j,j+2,j-3);
printf("i = %d\n", i);
return 0;
}
output
i = 1
j++
和 ++j
会改变 j
的值,j+2
不会
优先级别
算术>关系>逻辑>赋值
……
未完待续