k<<=1具体是什么意思()

??给大家推荐个靠谱的公众号程序员探索之路,大家一起加油k<<=1具体是什么意思()
文章图片

首先说明一个东西机器:0,1序列。
【k<<=1具体是什么意思()】位移操作建立在补码的基础之上。
1.无符号位移
无符号位移:左移,高位截去,低位补零。右移,高位补零,低位截去。
举个无符号位移的例子:
假设int i=3:转换成原码:0000 0011
i<<=1则表示将以上的二进制码往左移动一位,低位补零。结果是:0000 0110即十进制的6.
所以无符号位移有结论:i<<=n等价于i=i*(2的n次方); i>>=n等价于i=i/(2的n次方)(n>=0)(暂不考虑溢出的情况)。

2.带符号位移(暂不考虑溢出的情况)
带符号位移正数和无符号位移没有区别(因为正数的补码和反码,只是在原码前加正数标识位0)。
带符号负数位移则不同(因为负数的补码是反码加一取得,反码是原码按位取反再在高位加上标识位1得到),左移是符号位不变,整体左移,低位补0,右移是符号位不变,整体右移,高位补1

    推荐阅读