C语言基础提问 搞不懂

我想知道为什么 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, ...) 

第一个参数用双引号,那是一个常量字符串
后面的都是逗号表达式,需要从左往右计算后带入的。