1
6
从位操作的角度来看,这是微不足道的。乘2等于左移1位,除法等于右移。类似地,乘和除2的任何幂都是同样的小事。
还要注意
对于有符号除法,请注意,在某些语言(如C)中,整数除法向零截断,而算术右移(在2的补码的符号位副本中移动)总是向-无限舍入。例如
|
2
3
由于所有数字都以二进制形式存储,所以乘法/除法是一种简单的移位操作。 例如(乘法):
这同样适用于除法(右移操作),但如果需要余数,则需要考虑奇数除法的进位。 |
3
2
在这种情况下,重要的是,除2(或2的幂)仅对整数运算是微不足道的。当你谈论浮点除法时,它就不那么重要了。 原因是,某些数字系统(二进制、八进制、十六进制,你可以这么说)的基数除法总是可以通过简单的数字右移来完成。 例如,在除以十的十进制中,您有:
(将小数点向左移动一个位置,即数字向右移动) 十六进制数也一样:
(数字向右移动一个位置) 二进制数也是如此:
如果要除以2的幂,则需要执行的右移次数与指数相对应。例如,除以4意味着除以2*2,等于两个右移操作:
|
4
1
基本上,要对一个数字进行2次乘除,如果这个数字是用二进制表示的,你只需要将所有二进制数字向左或向右平移: 00100,即4,如果您想乘以2*2*2,只需将所有剩余的数字翻译3次: 100000,即32(4*8=32) 相反的方向 |
no one special · 32位整数缩放,无溢出 6 年前 |
Benn Tan · 比特操作:更难翻动硬币 6 年前 |
Ganesh Thampi · 使用位运算符将十进制转换为二进制 6 年前 |
Ganesh Thampi · 使用位的奇偶程序 6 年前 |
datapanda · 三维网格的莫顿反向编码 6 年前 |
rubyquartz · 交换无符号短整数的字节 6 年前 |
John Proctor · C中位的掩蔽范围 6 年前 |
Areg Sarvazyan · 从无符号int中提取位的函数 6 年前 |
user9505617 · 按位异或0xFFFFFFFF? 6 年前 |