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("num |=(1<<1) %d %d\n",num |=(1<<1),num |= (1<<3));
你把这一句分成两个独立的句子来执行
或者你用两个变量来计算
不要在一个语句中,用一个变量计算多次