当前位置: 首页 > 面试题库 >

负逻辑移位

松德曜
2023-03-14
问题内容

在Java中,为什么-32 >>> -1 = 1?
它不仅限于-32。只要它们不是太大,它就适用于所有负数。
我发现
x >>> -1 = 1
x >>> -2 = 3
x >>> -3 = 7
x >>> -4 = 15
给出0> x>一些大的负数

-1与<< 1一样吗?但是-32 << 1 = -64。
我已经阅读了二进制补码,但仍然不明白其原因。


问题答案:

这是因为当您移位32位时int,它仅占用移位距离的最后5位。(即mod 32),因此-1 mod 32 =
31,因此您向右移动了31位。当您移一个负数(其起始位全为1)时,您最终得到1。类似地,向右移-2即向右移30位,依此类推。如果向右移long,则需要6移位距离的位数。有关移位运算符如何工作的规范,请参见此处:http
:
//docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.19



 类似资料:
  • 2、逻辑移位指令 此组指令有:逻辑左移SHL(ShiftLogical Left)和逻辑右移SHR(ShiftLogical Right)。它们的指令格式如下: SHL/SHR Reg/Mem, CL/Imm 受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。 逻辑左移/右移指令只有它们的移位方向不同,移位后空出的位都补0。它们的具体功能下图(a)、(b)所示。 (a)、SHL (b)、

  • 我在时间管理上使用过很多次。 当向mktime提供一个包含负值的结构tm时,我注意到一些非常奇怪的事情。 以下面的代码为例。2013年11月3日,洛杉矶的DST发生了变化。如果我在tm中指定时间为2013-11-04午夜,并减去24小时,则得到的值与2013-11-03午夜相同。它与UTC的时差为25小时,这很好,就像isdst=-1一样,我们可以说是在看“Wallcock time”。减去144

  • 逻辑层 App Service 小程序开发框架的逻辑层使用 JavaScript 引擎为小程序提供开发者 JavaScript 代码的运行环境以及京东小程序的特有功能。 逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。 开发者写的所有代码最终将会打包成一份 JavaScript 文件,并在小程序启动的时候运行,直到小程序销毁。这一行为类似 ServiceWorker,所以逻辑层也称之

  • 根据《联合法律法规》第15.19条: 如果左手操作数的提升类型是长的,那么只使用右手操作数的六个最低阶位作为移位距离。这就好像右边的操作数服从一个位逻辑AND运算符(§15.22.1),掩码值为0x3f(0b111111)。因此,实际使用的移位距离总是在0到63的范围内,包括在内。 我们可以在C#中找到同样的东西。在Python中,它将是6位而不是5位,但逻辑保持不变。 背后的理由是什么?对我来说

  • 问题内容: 如标题所示,JavaScript中有一个特定的运算符。例如,在JavaScript中,我们将得到以下结果: 那么是否有某种方法或运算符来表示呢? 问题答案: 没有内置的运算符,但是您可以轻松地模拟自己: 以下替代实现消除了对的需要:

  • 问题内容: 什么逻辑运营商之间的不同,和位类似物,在使用?各种解决方案的效率是否存在差异? 问题答案: 逻辑运算符对逻辑值进行运算,而按位运算符对整数位进行运算。停止考虑性能,并按其预期目的使用它们。