printf("%d", -n++);
由于-和++都是一元运算符,所以他们的优先级是一样的,但一元运算符的结合性是右结合的,所以printf("%d",-(n++));
== n=n+1; 由于n++是右结合,所以左
printf("%d",-n); 边的恒等式不成立。
正确的恒等式为: == printf("%d",-n);
n=n+1;
疑问:为什么将n++括起来却不先执行n++呢?
把n++括起来表示的是n++这个操作的运算对象是n,而不是-n;
如果printf("%d",(-n)++)这是左结合的,就会产生这样的:
-n=-n+1 因为自增运算符的对象只能是变量,而不是表达式。
而-n是表达式,所以-n=-n+1是错误的。
自动类型转换
例如:浮点数除法
11.0 / 5 = 11.0 / 5.0 = 2.2
*C编译器将所有操作数都转换成取值范围较大的操作数的类型——类型提升
char和short都可以直接提升为unsigned int型
int+float ——float+float
long(2147483647) +unsigned int(4294967295)—— unsigned long
C语言学习笔记(三)
最新推荐文章于 2021-05-23 23:34:40 发布