Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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';s>&燃气轮机;与>&燃气轮机&燃气轮机;操作人员_Java_Operators_Bit Manipulation - Fatal编程技术网

Java';s>&燃气轮机;与>&燃气轮机&燃气轮机;操作人员

Java';s>&燃气轮机;与>&燃气轮机&燃气轮机;操作人员,java,operators,bit-manipulation,Java,Operators,Bit Manipulation,我没有Java参考书,我很难用谷歌找到答案 Java中“>>”和“>>>”运算符之间的区别是什么 int value = 0x0100; int result = (value >> 8); System.out.println("(value >> 8) = " + result); // Prints: "(value >> 8) = 1" result = (value >>> 8); System.out.println("(v

我没有Java参考书,我很难用谷歌找到答案

Java中“>>”和“>>>”运算符之间的区别是什么

int value = 0x0100;

int result = (value >> 8);
System.out.println("(value >> 8) = " + result);  // Prints: "(value >> 8) = 1"

result = (value >>> 8);
System.out.println("(value >>> 8) = " + result); // Prints: "(value >>> 8) = 1"
>>
是,
是。

来自:

n>>p(右移) 将n个位置的位向右移动p个位置。如果n是2的补码有符号数,则符号位将移到高阶位置

示例:5>>2=1

n>>p(右移) 将n个位置的位向右移动p个位置。零被移到高阶位置

示例:-4>>>28=15

>>运算符保留最左边的位。最左边的位用前面的内容填充。这与符号扩展有关。在这种情况下,左侧有一个1,它被保留下来。如果不想将1保持在左边,请使用>>>运算符将0移到最左边的位


>>是一种算术移位,它将符号位保留在任何“空”位中。另一种是逻辑移位,用零填充空白点。

这与有符号值数学有关。
>>
将高阶位归零,
>
保留符号位并将其拉入。

算术移位>>对有符号整数除以2,而逻辑移位>>>对无符号数除以2(如果将有符号Java int中的位模式解释为无符号整数)有符号整数使用高阶位表示符号

因此,
>
保留符号,而
>
不保留符号。这就是为什么将
>
称为算术移位,而将
>>
称为逻辑移位的原因

通过这种方式,您可以(假设为32位整数)执行以下操作:

  • -10>>1
    产生-5(
    0xFFFFF6>>1
    产生0xFFFFFB-注意高位保持不变。)
  • -10>>>1
    产生2147483643(
    0xFFFFF6>>1
    产生0x7FFFFB-请注意,所有位都已移位,因此高阶位现在为零。根据两位补码算术,数字不再为负。)
对于正整数,
>
>
的作用相同,因为高阶位已经为零


它还解释了为什么不需要一个
正确答案已经发布了不止一次,但不是来自权威来源

这是来自:

移位运算符包括左移位
,和无符号右移位
>
;它们在语法上是左关联的(从左到右分组)。移位运算符的左操作数是要移位的值;右侧操作数指定移位距离

n>>s
的值是带符号扩展的
n
右移
s
位位置。结果值为⌊n/2s⌋. 对于
n
的非负值,这相当于将整数除法运算符
/
计算出的整数除法的二次方截断为
s
的幂


n>>s
的值是
n
右移的
s
位位置,扩展为零。如果
n
为正,则结果与
n>>s
的结果相同;如果
n
为负数,则结果等于表达式
(n>>s)+(2s)+(2L(正数)的结果,没有差异。负数(两个补码)将用0填充>>,用1填充>>

1010 0110>>>2=0010 1001


1010 0110>>2=1110 1001非常感谢您的回答。它回答了我的另一个问题:如何在只有逻辑移位的CPU上有效地执行算术移位。“(n>>s)+(2@BillK虽然答案很好,但你没有看到当你要发表评论时,请你不要写+1或感谢之类的东西吗?@Priydarshising我通常不会写,但我认为指出这一点很有用,应该投票高于公认的答案(似乎有效)。如果我只是说“我会更好吗?”“最有用的答案”?另外,您是否绝对确定该指南存在于'09年?可能重复:,