Java';s>&燃气轮机;与>&燃气轮机&燃气轮机;操作人员
我没有Java参考书,我很难用谷歌找到答案 Java中“>>”和“>>>”运算符之间的区别是什么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
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位整数)执行以下操作:
产生-5(-10>>1
产生0xFFFFFB-注意高位保持不变。)0xFFFFF6>>1
产生2147483643(-10>>>1
产生0x7FFFFB-请注意,所有位都已移位,因此高阶位现在为零。根据两位补码算术,数字不再为负。)0xFFFFF6>>1
>
和>
的作用相同,因为高阶位已经为零
它还解释了为什么不需要一个
正确答案已经发布了不止一次,但不是来自权威来源
这是来自:
移位运算符包括左移位
,和无符号右移位>
;它们在语法上是左关联的(从左到右分组)。移位运算符的左操作数是要移位的值;右侧操作数指定移位距离
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年?可能重复:,