【发布时间】:2019-02-21 15:41:49
【问题描述】:
Decimal Binary
x1 = 105 0110 1001
x2 = -38 1101 1010
1. (byte) (x>>2)
2. (byte) (x>>>26)
我知道第一次移位会将其向右移位两次,并将丢失的位替换为 1。因此移位导致: 1111 0110
但我不知道为什么第二个班次会导致: 0011 1111 或 63。
我的理解是 x >> 如果 x 为负数则加 1,如果 x 为正数则加 0。 >>> 无论符号如何,都会添加一个 0。那么如果是这种情况,x2 >>> 26 的结果不是 0000 0000 吗?
【问题讨论】:
-
(byte) (x>>>26)首先转换,然后转换为byte。x是什么类型的?我敢打赌它比 8 位更宽。 -
可能会有所帮助。 Bitwise Tutorial 正如@FedericoklezCulloca 所说;您可能想尝试使用 int 来保存正确的值。当我第一次开始尝试位移时,我发现即使在尝试编写高性能网络时,强制转换变量也很棘手..
-
好的,请修正您的示例(包括
x1和x2的类型,并在班次中放置正确的东西而不是x。 -
我认为类型无关紧要,因为无论如何在移位之前值已扩大到 32 位 (
int)。 IE。 -38 在这里不是1101 1010,而是1111 1111 1111 1111 1111 1111 1101 1010。这应该清楚为什么-38 >>> 26是0000 0000 0000 0000 0000 0000 0011 1111(63)。 -
既然您无论如何都会编辑您的问题,您能否提供一个Minimal, Complete, and Verifiable Example(即显示您的问题所在的小程序)。