k<<=1具体是什么意思?
2015-08-03 15:16
253 查看
首先说明一个东西机器:0,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
首先说明一个东西机器:0,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
相关文章推荐
- 社会友谊和人群移动:基于位置的社交网络中的用户移动(二)
- 安卓学习(一)——Activity
- 改变UISearchBar的细节问题
- 面试十大常见Java String问题
- Divide Two Integers
- (转)c++迭代器
- Oracle中的CHR()函数与ASCII()函数
- Oracle中的CHR()函数与ASCII()函数
- Linux cp复制
- Ruby中的集合编写指南
- 解决SQLServer远程连接失败的问题
- iOS开发中tableview中cell分隔线与左右的距离
- 【Android进阶学习】监听EditText的变化
- 南阳OJ~~水仙花数
- POJ 2513 Colored Sticks(字典树+并查集+欧拉回路)
- HTTP Live Streaming直播(iOS直播)技术分析与实现
- HashMap源码分析
- 解决双缓存仍然闪烁的问题
- Linux下端口被占用解决
- 轻松java学习之路4