java中的">>>"在c#中如何实现 java中的">>>"在c#中如何实现 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 >>> 干吗的,java不会 汗 移位运算符移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。 Java里有">>>"吗?">>"在C#里是可以被重载的 >>如果第一个操作数为 int 或 long,则右移位是算术移位(高序空位设置为符号位)。如果第一个操作数为 uint 或 ulong 类型,则右移位是逻辑移位(高位填充 0)。按这个来说,对于uint 或ulong的移位运算,就相当于JAVA中的>>>,所以要实现JAVA中的>>>,就保证左操作数是uint 或ulong即可,如果不是,则要转换。我估计JAVA有这东东是因为他没有 无符号类型吧 Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。--java不懂,如果像这位仁兄说的,那padleft和padright应该可以实现吧 与C#等价的java代码 public static int foo(int x, int y) { int mask = 0x7fffffff; //Integer.MAX_VALUE for (int i = 0; i < y; i++) { x >>= 1; x &= mask; } return x; } //测试,没有考虑移位数<=0的控制 public static void main(String[] args) { System.out.println((1 >>> 3) == foo(1, 3)); System.out.println((1 >>> 5) == foo(1, 5)); System.out.println((1 >>> 7) == foo(1, 7)); System.out.println((10 >>> 9) == foo(10, 9)); System.out.println((-1 >>> 5) == foo(-1, 5)); System.out.println((-9999 >>> 7) == foo(-9999, 7)); System.out.println((-1234 >>> 3) == foo(-1234, 3)); System.out.println((-10000 >>> 5) == foo(-10000, 5)); System.out.println((-10000 >>> 7) == foo(-10000, 7)); }java论坛解决了,兄弟们辛苦了... 怎么在类中修改窗体控件的属性 double c = 9/5; ResourceManager 读不出数据 Nhibernate批量删除 DataGridView的RowEnter事件中获取绑定数据源的当前行问题 求助:关于在C#中使用 dll 的问题 找出字符串区别,各位高手帮我想想 怎么实现客户端软件自动升级? 关于dataset问题,在线等! 初级问题2个? 如何判断线程正在运行 动态table往excel读入数据的问题。
移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。
">>"在C#里是可以被重载的
如果第一个操作数为 int 或 long,则右移位是算术移位(高序空位设置为符号位)。如果第一个操作数为 uint 或 ulong 类型,则右移位是逻辑移位(高位填充 0)。按这个来说,对于uint 或ulong的移位运算,就相当于JAVA中的>>>,所以要实现JAVA中的>>>,就保证左操作数是uint 或ulong即可,如果不是,则要转换。
我估计JAVA有这东东是因为他没有 无符号类型吧
--
java不懂,如果像这位仁兄说的,那padleft和padright应该可以实现吧
public static int foo(int x, int y) {
int mask = 0x7fffffff; //Integer.MAX_VALUE
for (int i = 0; i < y; i++) {
x >>= 1;
x &= mask;
}
return x;
} //测试,没有考虑移位数<=0的控制
public static void main(String[] args) {
System.out.println((1 >>> 3) == foo(1, 3));
System.out.println((1 >>> 5) == foo(1, 5));
System.out.println((1 >>> 7) == foo(1, 7));
System.out.println((10 >>> 9) == foo(10, 9));
System.out.println((-1 >>> 5) == foo(-1, 5));
System.out.println((-9999 >>> 7) == foo(-9999, 7));
System.out.println((-1234 >>> 3) == foo(-1234, 3));
System.out.println((-10000 >>> 5) == foo(-10000, 5));
System.out.println((-10000 >>> 7) == foo(-10000, 7));
}java论坛解决了,兄弟们辛苦了...