我不确定此右移如何等于0: 我了解移位的工作原理,但是为什么作者说二进制等于零,而十进制却不同?二进制零和十进制零不一样吗?
0000
它怎么也等于二进制零?
无符号整数值= 65372U;
作为2字节变量中的二进制值,它是:
1111 1111 0101 1100
假设您现在执行以下语句:
无符号整数结果=值>> 2; / *向右移两位* /
值的位将向右移动两个位置,从而引入 左端为零,结果值将存储在 结果。二进制形式为0,即十进制值16343。
0011 1111 1101 0111
答案 0 :(得分:1)
您的假设是正确的。二进制0与整数0相同。这本书充其量是错印的,而最坏的情况是普通的。不过,它的示例似乎还可以。
同样,记录中,二进制0是您期望的:
0000 0000 0000 0000
0011 1111 1101 0111
不等于0。
答案 1 :(得分:0)
在实践中,位移位实际上是将 N 位移到位,因此移位2:
10101101
||||||
\\\\\\
\\\\\\
vvvvvv
00101011
在数学上,右移一位等于二分之一,而左移则等于二分之一。您有时会看到这种优化,因为移位通常比乘法快得多。
就像用十进制数除以10的任意幂一样简单,您只需删除一定位数或移动小数位即可。