在java中,当美联储做多时,逻辑左移不剔除?

在java中,当美联储做多时,逻辑左移不剔除?,java,bit-manipulation,Java,Bit Manipulation,我有一个十六进制的长字符串,我正在执行LSL,它似乎只是扩展字符串,而不是移动它 长R,在操作之前为: 100000000000000000000001101011 R<<4 R假设R是一个正的long,它的二进制表示实际上在左边加了32个零位;但是,在将其打印到控制台时,它们不会显示。对于零位,它将如下所示: 0000_0000_0000_0000_0000_0000_0000_0000_1000_0000_0000_0000_0000_0000_0110_1011 当对该值执

我有一个十六进制的长字符串,我正在执行LSL,它似乎只是扩展字符串,而不是移动它

长R,在操作之前为:

100000000000000000000001101011

R<<4

R假设
R
是一个正的
long
,它的二进制表示实际上在左边加了32个零位;但是,在将其打印到控制台时,它们不会显示。对于零位,它将如下所示:

0000_0000_0000_0000_0000_0000_0000_0000_1000_0000_0000_0000_0000_0000_0110_1011
当对该值执行左移位时,它只是将所有位向左移位,丢弃超过第64位的所有位

因为您的示例中的值只有32位,所以不会丢弃任何位,而右边只是用零填充。向左移动4时,输出如下:

0000_0000_0000_0000_0000_0000_0000_1000_0000_0000_0000_0000_0000_0110_1011_0000

在您的评论中,您声明正在使用的值是
0x8000006B
,这是一个负数。因此,其表示形式如下所示(在执行左移位之前):

及之后:

1111_1111_1111_1111_1111_1111_1111_1000_0000_0000_0000_0000_0000_0110_1011_0000

那是十六进制表示法还是位表示法?看起来是后者。如果是后者,它是负数吗?真的没有“十六进制长”这样的怪兽。一段很长的时间就是一段很长的时间。字符串表示形式可能是十六进制,但数字很长。它是十六进制数字的long.tobinarysting()打印输出0x8000006B@RNPF返回“参数以二进制(基数2)表示的无符号长值的字符串表示形式”,而返回“参数以十六进制(以16为基数)表示的无符号长值的字符串表示形式”“。你在混用术语。请停止那样做。引用的文本来自文档,即javadoc,它是为您的利益而链接的。您知道
是64位,不是32位吗?选中此复选框,以便在钻头从左侧脱落之前,您必须再移动一点
1111_1111_1111_1111_1111_1111_1111_1000_0000_0000_0000_0000_0000_0110_1011_0000