我试试代码
System.out.println( 16 >>> 3);
输出是2!
但这是如何工作的?语法是什么?
我目前在java中有一个奇怪的功能,我试图规避.如果我将一个字节定义为0x80并且我向右移位1位置,则java将输出0xC0,而不是0x40.有人知道为什么吗?
此外,如果我输入0x70,并向右移1位置,它将正确输出0x38.
我也注意到这种行为也是短路和冲击.当MSB被设置时,MSB将无论如何都保持设置,并且当该值被转换为更大的值(ala int)时,"新"空间将被设置位填充.
基本上我要问的是这种行为是否正确?
我想弄清楚>> =和>>> =之间的区别.我明白他们做了什么,但我不明白其中的区别.以下输出为38 152 38 152.逐位赋值>>> =似乎与>> =完全相同.
public static void main(String[] args)
{
int c = 153;
System.out.print((c >>= 2));
System.out.print((c <<= 2));
System.out.print((c >>>= 2));
System.out.print((c <<= 2));
}
Run Code Online (Sandbox Code Playgroud) 我很难理解>>>java中的bitwise运算符.
int a = 60;
int c = 0;
c = a >>> 2;
System.out.println("a >>> 2 = " + c );
Run Code Online (Sandbox Code Playgroud)
结果是15
但它怎么变成15?
我试图将逻辑右移(>>>)(>>>和>>之间的差异)转换为C#的Java代码
Java代码是
return hash >>> 24 ^ hash & 0xFFFFFF;
Run Code Online (Sandbox Code Playgroud)
C#被标记>>>为语法错误.
如何解决?
更新1
人们建议>>在C#中使用,但它没有解决问题.
System.out.println("hash 1 !!! = " + (-986417464>>>24));
Run Code Online (Sandbox Code Playgroud)
是197年
但
Console.WriteLine("hash 1 !!! = " + (-986417464 >> 24));
Run Code Online (Sandbox Code Playgroud)
是-59
谢谢!