Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么将平铺转换为长平铺的移位整数掩码返回零?(Java,位移位)_Java_Long Integer_Bit Shift_Bitmask_Tilde - Fatal编程技术网

为什么将平铺转换为长平铺的移位整数掩码返回零?(Java,位移位)

为什么将平铺转换为长平铺的移位整数掩码返回零?(Java,位移位),java,long-integer,bit-shift,bitmask,tilde,Java,Long Integer,Bit Shift,Bitmask,Tilde,我正在尝试创建一个掩码,以便在Java中查看长屏幕上的特定位。我尝试了以下方法: long mask = ~ (0xffffffff << 32); long mask=~(0xffffffffJava假设,如果对int执行算术运算,则希望返回int,而不是long(在计算完成后将输出指定给long,这一事实不会影响计算本身。) 将int(32位)左移32位不会产生任何效果。将int左移时,只使用右侧操作数的五个最低阶位,给出一个0到31之间的数字。 这就是为什么(0xfffff

我正在尝试创建一个掩码,以便在Java中查看长屏幕上的特定位。我尝试了以下方法:

long mask = ~ (0xffffffff << 32);

long mask=~(0xffffffffJava假设,如果对
int
执行算术运算,则希望返回
int
,而不是
long
(在计算完成后将输出指定给
long
,这一事实不会影响计算本身。)

int
(32位)左移32位不会产生任何效果。将
int
左移时,只使用右侧操作数的五个最低阶位,给出一个0到31之间的数字。


这就是为什么
(0xffffffffJava假设如果您对
int
执行算术运算,那么您希望返回
int
,而不是
long
(在计算完成后将输出分配给
long
不会影响计算本身)

int
(32位)左移32位不会产生任何效果。将
int
左移时,只使用右侧操作数的五个最低阶位,给出一个0到31之间的数字。


这就是为什么
(0xffffffff左移位是模†数据类型的大小,例如,32位整数的移位没有影响

(0xffffffff << 32) ==
(0xffffffff << (32 % Integer.SIZE)) ==
(0xffffffff << (32 % 32)) ==
(0xffffffff << 0) ==
0xffffffff

†严格来说,最后5位表示整数,最后6位表示长整数,这与负左移位的模不同。

左移位是模†数据类型的大小,例如,32位整数的移位没有影响

(0xffffffff << 32) ==
(0xffffffff << (32 % Integer.SIZE)) ==
(0xffffffff << (32 % 32)) ==
(0xffffffff << 0) ==
0xffffffff

†严格来说,整数取最后5位,长整数取最后6位,这与左负移位的模不同。

好吧,现在我明白了。我刚刚尝试了长掩码=~(long)0xffffffff“将所有整数位保留为零”但是他们
~
它,所以,解释为什么它仍然是0。强制转换在操作执行后发生,因此您可以将其视为一个两步过程:-int intmask=~(0xFFFFFF好的,现在我明白了。我只是尝试了long mask=~(long)0xFFFFFF“将所有int位保留为零”但是,他们将
~
它,因此,请解释为什么它仍然是0。强制转换在操作执行后发生,因此您可以将其视为一个两步过程:-int intmask=~(0xffffffff当您执行
int时执行
int
(0xffffffffL << 32) ==
(0xffffffffL << (32 % Long.SIZE) ==
(0xffffffffL << (32 % 64) ==
(0xffffffffL << 32) ==
0xffffffff00000000L