c/c++中k<<=1什么意思啊

c/c++中k<<=1什么意思啊


互换的青春
浏览 922回答 1
1回答

慕丝7291255

机器码你应该知道吧:就是0,1序列,位移操作建立在补码的基础之上。1.无符号位移无符号位移:左移,高位截去,低位补零。右移,高位补零,低位截去。举个无符号位移的例子:假设int i=3:转换成原码:0000 0011i<<=1则表示将以上的二进制码往左移动一位,低位补零。结果是:0000 0110即十进制的6.所以无符号位移有结论:i<<=n 等价于 i=i*(2的n次方); i>>=n 等价于 i=i/(2的n次方)(n>=0)(暂不考虑溢出的情况)。2.带符号位移(暂不考虑溢出的情况)带符号位移正数和无符号位移没有区别(因为正数的补码和反码,只是在原码前加正数标识位0)。带符号负数位移则不同(因为负数的补码是反码加一取得,反码是原码按位取反再在高位加上标识位1得到),左移是符号位不变,整体左移,低位补0,右移是符号位不变,整体右移,高位补1。
打开App,查看更多内容
随时随地看视频慕课网APP