java - 为什么我会为 >> 运算符得到这个意外的结果?
问题描述
我有一个很长的代码:
long binary = 0b1L<< 63;
这给出了预期的结果,即第 63 个索引处的结果:
1000000000000000000000000000000000000000000000000000000000000000
但是当我花了这么长时间,并将 >> 运算符应用于它时,它给了我一个意想不到的结果。例如,当我在上述二进制文件上调用此代码片段时:
long newBinary = binary >>8;
它向右移动了正确的数量,但它用 1 填充了前导零:
1111111110000000000000000000000000000000000000000000000000000000
发生这种情况是否有特定原因?
解决方案
>>
是有符号右移运算符,每次用符号位(原数的最左边位)填充最左边的位置。另一方面,无符号右移运算符>>>
总是用 填充0
。
脚步:
1000000000000000000000000000000000000000000000000000000000000000
右移 8 个位置:
000000001000000000000000000000000000000000000000000000000000000
用原始符号位 (1) 填充左侧的移位位:
111111111000000000000000000000000000000000000000000000000000000
另请参阅:按位和位移运算符
推荐阅读
- javascript - 是否可以在 React 中重新安装组件?
- php - Laravel Dusk - 重用浏览器及其会话和 cookie
- pandas - 使用 pandas/beautiful soup(而不是 selenium,这很慢?)刮取表数据,BS 实现不起作用
- android - 如何在同一个 ConstraintLayout 中为不同的 TextView 使用单独的 ConstraintSet 操作?
- css - 翻转动画在 Safari 上不起作用
- python - 使用 Python 在 Excel 中标记单个变量数据点
- ios - 如何提取和计算具有属性 price 的对象数组的价格
- android - 我正在尝试使用按钮从资产文件夹加载 html 文件
- python - 如何扩展多边形直到其中一个边界到达一个点
- regex - 正则表达式 sed sql 数据库哈希:盐提取