Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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_Bit Shift_Scjp - Fatal编程技术网

Java 按位移位运算符。签名和未签名

Java 按位移位运算符。签名和未签名,java,bit-shift,scjp,Java,Bit Shift,Scjp,我正在用网上的补习笔记练习SCJP考试 根据我的笔记,>操作符应该是有符号右移的,符号位从左边引入。而左移位运算符>运算符移动符号 我一定是误解了什么,但是什么?“>>”是有符号的,因为它保留了符号。它使用二进制表示中最左边的数字作为填充符。例如: | this value is used as a filler 11011011 >> 11101101 01010010 >> 00101001 “>>>”是此运算符的未签名版本。

我正在用网上的补习笔记练习SCJP考试

根据我的笔记,
>
操作符应该是有符号右移的,符号位从左边引入。而左移位运算符
>
运算符移动符号

我一定是误解了什么,但是什么?

“>>”是有符号的,因为它保留了符号。它使用二进制表示中最左边的数字作为填充符。例如:

    | this value is used as a filler 
    11011011 
 >> 11101101  

    01010010
 >> 00101001 
“>>>”是此运算符的未签名版本。它始终使用零作为填充符:

    11011011 
>>> 01101101  

    01010010
>>> 00101001

在二进制表示法中,最左边的数字决定数字的符号。因此,如果它是“1”,那么我们有负值,如果它是“0”,那么我们的数字是正数。这就是为什么使用最左边的数字作为填充符可以保持符号永久性。

移位背后的思想是,它们可以作为2的幂的乘除(>2相当于/=4),这就是为什么有符号移位存在的原因。但是,无符号移位不一定保留负数。啊,好吧,那么我理解正确的移位运算符应该如何工作。谢谢!但是为什么我可以用"因为它在另一个方向上移动,最左边的数字取决于原始数字。它使用0作为填充符,但将其附加到数字的右侧。整数的符号由其最左边位的值决定。如果在
0
中移动,当它是
1
或反之亦然,则结果的符号会改变。好的,那么那么,我的笔记中关于左移位运算符的操作方式的信息基本上是不正确的(请参见what
-2