Java表达式等价性

Java表达式等价性,java,bit-manipulation,bitwise-operators,Java,Bit Manipulation,Bitwise Operators,对于Java,它是怎样的: xxx....xxxxxx long c=((long)a它们不是等价的(除非您限制b的可能值) xxx....xxxxxx 例如,如果a==1和b=-1,第一个表达式的结果是4563402751,第二个表达式的结果是4294967295 xxx....xxxxxx 如果您将b限制为>=0并且它们不相等,则它

对于Java,它是怎样的:

                          xxx....xxxxxx
long c=((long)a它们不是等价的(除非您限制
b
的可能值)

                          xxx....xxxxxx
例如,如果a==1和b=-1,第一个表达式的结果是
4563402751
,第二个表达式的结果是
4294967295

                          xxx....xxxxxx
如果您将
b
限制为>=
0
并且它们不相等,则它们将给出相同的结果(除非您限制
b
的可能值)

                          xxx....xxxxxx
例如,如果a==1和b=-1,第一个表达式的结果是
4563402751
,第二个表达式的结果是
4294967295

                          xxx....xxxxxx

如果您将
b
限制为>=
0
并且让我们看看位,它们将给出相同的结果

                          xxx....xxxxxx
假设
int
是1字节(8位),而
long
是2字节(16位)

                          xxx....xxxxxx

a让我们看看位

                          xxx....xxxxxx
假设
int
是1字节(8位),而
long
是2字节(16位)

                          xxx....xxxxxx

如果操作数没有任何公共位,
a按位OR相当于加法

                          xxx....xxxxxx
例如:

                          xxx....xxxxxx
0x123456780000000 + 0x12345678 = 0x1234567812345678
0x123456780000000 | 0x12345678 = 0x1234567812345678

如果将
a
32位向左移位,则右侧将有32个零位。假设
b
只有32位,则可以安全地执行或代替加法。

如果操作数没有任何公共位,则按位或相当于加法

                          xxx....xxxxxx
例如:

                          xxx....xxxxxx
0x123456780000000 + 0x12345678 = 0x1234567812345678
0x123456780000000 | 0x12345678 = 0x1234567812345678

如果将
a
32位移到左边,右边将有32个零位。假设
b
只有32位,您可以安全地执行或代替加法。

((长)b&0xffffffffffl)
b
中提取最低有效的32位((长)a
((长)b&0xffffffffffffffff)
b
((长)a)中提取最低有效的32位,并假设
a
只有32位,您首先可以安全地进行移位…并且假设
a
只有32位,您首先可以安全地进行移位…为了使它们真正等效,您需要进行
c+=(b&0xFFFFFL)
(我想你想要的是7Fs而不是8)为了使它们真正等效,你需要做
c+=(b&0xFFFFFL)
(我想你想要的是7Fs而不是8)对于其他面临同样问题的人,让我绊倒的部分是我(错误地)做出的假设“&0xFFFFFFFL”将返回相同的数字。但是它返回较低的32位。在这之后,一切都是有意义的。谢谢!对于其他面临相同问题的人,让我绊倒的部分是我(错误地)做出的假设“&0xFFFFFL”将返回相同的数字。但是它返回较低的32位。在这之后,一切都有意义。谢谢!
                          xxx....xxxxxx