学习位操作时的“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 为基数(标准十进制))。类似地,0x5555 = 21845。十六进制是在按位运算(这是您的代码中发生的情况)期间使用的常用基数,因为基数是 2 的幂并且写出比二进制更紧凑。
这些是十六进制值。 0xAAAA 相当于 1010101010101010。A = 1010(二进制)。所以因此4个A是二进制值的四个序列。
当您将其与二进制 & 结合使用时,您会查找 N 中与模式 1010 一致的所有位...其中两个位均为 1 并仅保留这些位。
示例:
1110101010101001
& 1010101010101010
------------------
1010101010101000
0x5555也是如此。 5 = 0101。希望你明白了。
另一方面,二进制或运算符 returns 在二进制数字有 1 的每个地方都有 1,如:
1010
| 0101
------
1111
位移运算符( >> 和 << )将每个二进制数字移动一个位置(取决于箭头的方向)等等。十六进制只是一种更好的格式来可视化位,而不必写出每一位。
在学习了基础知识和一些解决方案之后,我试图通过做一些问题来学习位操作,我似乎看到了这种格式。例如:
N = (N & 0xAAAA)>>1 | (N & 0x5555)<<1
这是做什么的(特别是 0XAAAA 和 0x5555)?这种语法或格式的名称是什么,以便我可以查找?
谢谢
是hexadecimal notation。 “0x”表示它是一个十六进制数,其余数字是值。前缀 0x 是许多系统和语言中使用的标准约定,例如 C 及其后代、Unix Shell、Windows Powershell。
AAAA 等于 43690(以 10 为基数(标准十进制))。类似地,0x5555 = 21845。十六进制是在按位运算(这是您的代码中发生的情况)期间使用的常用基数,因为基数是 2 的幂并且写出比二进制更紧凑。
这些是十六进制值。 0xAAAA 相当于 1010101010101010。A = 1010(二进制)。所以因此4个A是二进制值的四个序列。
当您将其与二进制 & 结合使用时,您会查找 N 中与模式 1010 一致的所有位...其中两个位均为 1 并仅保留这些位。
示例:
1110101010101001
& 1010101010101010
------------------
1010101010101000
0x5555也是如此。 5 = 0101。希望你明白了。
另一方面,二进制或运算符 returns 在二进制数字有 1 的每个地方都有 1,如:
1010
| 0101
------
1111
位移运算符( >> 和 << )将每个二进制数字移动一个位置(取决于箭头的方向)等等。十六进制只是一种更好的格式来可视化位,而不必写出每一位。