学习位操作时的“0xXXXX”语法是什么? (其中 X 是大写字母数字字符)

What is the "0xXXXX" syntax when learning bit manipulation? (where X is a capital alphanumeric character)

在学习了基础知识和一些解决方案之后,我试图通过做一些问题来学习位操作,我似乎看到了这种格式。例如:

N = (N & 0xAAAA)>>1 | (N & 0x5555)<<1

这是做什么的(特别是 0XAAAA 和 0x5555)?这种语法或格式的名称是什么,以便我可以查找?

谢谢

hexadecimal notation。 “0x”表示它是一个十六进制数,其余数字是值。前缀 0x 是许多系统和语言中使用的标准约定,例如 C 及其后代、Unix Shell、Windows Powershell。

AAAA 等于 43690(以 10 为基数(标准十进制))。类似地,0x55​​55 = 21845。十六进制是在按位运算(这是您的代码中发生的情况)期间使用的常用基数,因为基数是 2 的幂并且写出比二进制更紧凑。

这些是十六进制值。 0xAAAA 相当于 1010101010101010。A = 1010(二进制)。所以因此4个A是二进制值的四个序列。

当您将其与二进制 & 结合使用时,您会查找 N 中与模式 1010 一致的所有位...其中两个位均为 1 并仅保留这些位。

示例:

  1110101010101001
& 1010101010101010
------------------
  1010101010101000

0x5555也是如此。 5 = 0101。希望你明白了。

另一方面,二进制或运算符 returns 在二进制数字有 1 的每个地方都有 1,如:

  1010
| 0101
------
  1111

位移运算符( >> 和 << )将每个二进制数字移动一个位置(取决于箭头的方向)等等。十六进制只是一种更好的格式来可视化位,而不必写出每一位。