1 << i 是什么意思,我该如何使用它?
What does 1 << i means and how can I use it for?
我看到有人用 1 << i,有时 1 << n。这是什么以及如何使用它?
当您想到二进制表示形式的值时,它会将值向左移动 n
次。 n
将在右侧添加零位数字。
所以 1b
变成 100b
等等 如果 n == 2
.
如果按十进制看,移位一次(n==1
)相当于乘以2。移位两次等于乘以4等运算。
一个优点是位移比 "real" 整数乘法更快。
通常在计算中你会看到所谓的位域,其中每个位打开或关闭某些东西,或者有一些特殊的含义。
例如,在微控制器上,寄存器的每一位都可能代表连接到 LED 的数字输出。
在那里,该符号可用于创建一个 "mask",表示程序员想要操作的位数 (i
)。
例如
x &= ~(1<<4)
清除第 4 位,而 x |= (1<<4)
将设置相同的位。
请注意,如果 i
过高或运算的左侧为负值,则移位可能会在某些系统上导致未定义的行为。
我看到有人用 1 << i,有时 1 << n。这是什么以及如何使用它?
当您想到二进制表示形式的值时,它会将值向左移动 n
次。 n
将在右侧添加零位数字。
所以 1b
变成 100b
等等 如果 n == 2
.
如果按十进制看,移位一次(n==1
)相当于乘以2。移位两次等于乘以4等运算。
一个优点是位移比 "real" 整数乘法更快。
通常在计算中你会看到所谓的位域,其中每个位打开或关闭某些东西,或者有一些特殊的含义。
例如,在微控制器上,寄存器的每一位都可能代表连接到 LED 的数字输出。
在那里,该符号可用于创建一个 "mask",表示程序员想要操作的位数 (i
)。
例如
x &= ~(1<<4)
清除第 4 位,而 x |= (1<<4)
将设置相同的位。
请注意,如果 i
过高或运算的左侧为负值,则移位可能会在某些系统上导致未定义的行为。