Java表达式等价性
对于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并且它们不相等,则它
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