C语言中printf(“%d",x,(x|(1<<4)|(1<<3)|(1<<2)))是什么意思?

2025-06-21 02:22:30
推荐回答(1个)
回答1:

  您好,回答内容较长,展开看就不乱了...
  这都是位操作,其中:
  ~ : 意思是按位取反,类似于非(!)的关系,取它的反面。
  <<: 意思是左移,移动二进制的位。
  & : 意思是按位与,类似于与(&&)的关系,一假为假。
  ^ : 意思是按位异或,通俗地说就是相同为0,不同为1.
  | : 意思是按位或,类似于或(||)的关系,一真为真。
  优先级:按位取反 > 移位 > 按位与 > 按位异或 > 按位或

  第一个式子:x | (1<<4) | (1<<3) | (1<<2),写出它们的二进制码:

  1 :0 0 0 0 0 0 0 1
  1<<2:0 0 0 0 0 1 0 0 ★★
  1<<3:0 0 0 0 1 0 0 0 ★★
  1<<4:0 0 0 1 0 0 0 0 ★★
  (1<<4) | (1<<3) | (1<<2):0 0 0 1 1 1 0 0 ★★★
  显然,拿(1<<2),(1<<3),(1<<4)与x求位或的结果就是将x二进制位中第3、4、5位(从低位向高位计数)中的数变为1。此操作多用来恢复位。

  第二个式子:x & ~(1<<2) & ~(1<<0),写出它们的二级制码:
  1 :0 0 0 0 0 0 0 1
  1<<0 :0 0 0 0 0 0 0 1
  ~(1<<0):1 1 1 1 1 1 1 0 ★★
  1<<2 :0 0 0 0 0 1 0 0
  ~(1<<2):1 1 1 1 1 0 1 1 ★★
  ~(1<<2) & ~(1<<0):1 1 1 1 1 0 1 0 ★★★
  显然,这两个式子与x进行求位与的结果就是将x第1、3位处的二进制码变为0,此操作多用来清除位。

  第二个式子:x ^ (1<<3) ^ (1<<2),写出它们的二级制码:

  1 :0 0 0 0 0 0 0 1
  1<<2:0 0 0 0 0 1 0 0 ★★
  1<<3:0 0 0 0 1 0 0 0 ★★
  (1<<3) ^ (1<<2):0 0 0 0 1 1 0 0 ★★★
  显然,这两个式子与x进行求异或的结果就是将x第3、4位处的二进制码取反(0与1生成1,1与1生成0),其他位置不变。此操作多用来反转位和保留位。

  您的采纳是我们的动力(⊙v⊙)