我想知道为什么 num 两次的值都是15?不应该第一次为7吗?
C代码:
#include
2
3 int main()
4 {
5 int num = 5;//num = num |()
6 char val = 5;
7 printf("num |=(1<<1) %d %d\n",num |=(1<<1),num |= (1<<3));
8 printf("val |=(1<<1) %d\n",val |= (1<<1));
9 printf("val |=(1<<3) %d\n",val |= (1<<3));
10 return 0;
11 }
运行结果:
num |=(1<<1) 15 15
val |=(1<<1) 7
val |=(1<<3) 15
printf函数可不是计算一个参数就打印一个参数
是从右到左依次执行每个表达式,计算出值,然后统一打印
至于到底从左到右还是从右到左,不同IDE执行顺序会不同
所以不要学教科书上那种内卷的写法,那纯粹是为了出题难为你
你自己写代码应该尽量避免计算和打印写在一行里
是两个表达式都计算完后才确定num的值,然后才作为参数传递
先算出num的具体值,再输出,它不香吗?
看到这个问题,可能你还不了解printf 这个函数。
首先它是这样定义的:
int printf(const char *format, ...)
第一个参数用双引号,那是一个常量字符串
后面的都是逗号表达式,需要从左往右计算后带入的。