【原创】万事万物皆有规律可循:用一个简单的例子来寻找下位运算的规律
心得体会:
亘古不变、万事万物皆有规律可循。
问题背景:
以32位CPU架构举例:printf("result = %d\n", 9 << 3);
计算步骤:
0x01. 计算出十进制数9对应的二进制:
9 = 8 + 1 = 2^3 + 2^0
0x02. 确定二进制有效索引位:
根据 2^3 可知第3位为有效索引位,同样的2^0可知第0位也为有效索引位,所谓的有效索引位是指该索引位对应的值为1,换句话也就是说: 这个32位的二进数的第0位和第3位对应的值分别为1,其余位全为0.
0x03. 根据有效索引位我们可知对应的二进制数为:
0000 0000 0000 0000 0000 0000 0000 1001
0x04-A. 左移3位之算法A:
左移3位即代表将二进制的左侧3位丢弃,然后整体向左平移,左移之后位数必然会缺失,所以必须用0补足32位,最后得到新的二进制数如下:
0000 0000 0000 0000 0000 0000 0100 1000
0x04-B. 左移3位之算法B:
左移3位时,整体保持不动,我们只关注有效索引位,即:
将所有的有效索引位各自向左平移3位,不过要注意平移之后新的有效索引位对应的值为1,而平移之前的原旧索引有效位对应的值为0.
0x05. 将最后的二进制转换为十进制:
result = 2^6 + 2^3 = 64 + 8 = 72
0x06. 当然如果只关注运算结果,那最简单的左移算法就是乘法即:
9 << 3 = 9 * 2^3 = 9 * 8 = 72
版权声明:除非注明,本文由( blogdaren )原创,转载请保留文章出处。