高手请进:为什么 -1/2 值为0, 而 -1>>1 的值为-1呢? -1/2 二个整数的除法-1 >> 1 :-1的二进制表示为1111,1111 移位后仍为 1111,1111 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 -1/2为-0.5然而除数和被除数都是整数,所以结果为整数,当然就取0。>>是不带符号右移,你要的是带符号右移>>>public class W{ public static void main(String[] args) { int a; double b,c,d; a=-1/2; b=-1/2; c=-1.0/2; d=-1/2.0; System.out.println(a+" "+b+" "+c+" "+d); //输出为0 0.0 -0.5 -0.5 System.out.println(-1>>>1); //输出为2147483647 }} 不错FutureStonesoft(丑石) 好样的! to:FutureStonesoft(丑石) >>是不带符号右移,你要的是带符号右移>>> >>应该是带符号右移吧。 /*哎呀,真不好意思,我错了,以下纠正,算作补过,呵呵。多谢caiyanying732(学习) 的指正. >>是带符号右移,>>>是不带符号右移 >> 是向右移位,左边用最高位(符号位)填充 >>> 是向右移位,左边用0填充 这样解释应该就清楚了。 -1的二进制码位11111111B,所以用>>右移后,无论如何, 高位的空白都会用它的符号位1来填充,所以全部都是1, 故右移位后一直是-1,而如果用>>>右移后,高位会用0 来填充,所以就编程了一个正数。*/public class W{ public static void main(String[] args) { System.out.println(15>>1);//7 //15D=00001111B 带符号右移一位为 00000111B=7D System.out.println(-15>>1);//-8 //-15D=11110001B 带符号右移一位为 11111000B=-8D System.out.println(-15>>>1);//2147483640 //-15D=11111111111111111111111111110001B //不带符号右移一位为01111111111111111111111111111000=2147483640D System.out.println(-1>>1);//-1 //-1d=11111111111111111111111111111111B //带符号右移一位后 11111111111111111111111111111111B=-1D System.out.println(-1>>>1);//2147483647 //-1d=11111111111111111111111111111111B //不带符号右移一位后 01111111111111111111111111111111B=2147483647D System.out.println(-1>>2);//-1 System.out.println(-1>>>2);//1073741823 //-1D=11111111111111111111111111111111B //不带符号右移两位后 00111111111111111111111111111111B=1073741823D }} 一简单问题 菜鸟跪求帮助 怎么使用别的类中定义的组件 GUI怎么用代码关闭一个窗口? 100 分,三个JAVA对SQL操作的问题(批量导入,导出,输出报表) 用什么技术开发动画 急急急!那位大哥能给介绍一下用installanywhere将java程序作成*.exe 可执行文件。最好把运行环境包含进去。 这里该如何获取字符并对字符串排序?懂的人进来看看吧 高分:JNI急救!! 关于APPLET中tree的节点填加问题~!100分哦。高手请进~!(非Jtree类的树) 问题?谢谢 SWT的运行环境是什么??
>>是不带符号右移,你要的是带符号右移>>>
public class W
{
public static void main(String[] args)
{
int a;
double b,c,d;
a=-1/2;
b=-1/2;
c=-1.0/2;
d=-1/2.0;
System.out.println(a+" "+b+" "+c+" "+d);
//输出为0 0.0 -0.5 -0.5
System.out.println(-1>>>1);
//输出为2147483647
}
}
好样的!
>>是不带符号右移,你要的是带符号右移>>>
>>应该是带符号右移吧。
>> 是向右移位,左边用最高位(符号位)填充
>>> 是向右移位,左边用0填充
这样解释应该就清楚了。
-1的二进制码位11111111B,所以用>>右移后,无论如何,
高位的空白都会用它的符号位1来填充,所以全部都是1,
故右移位后一直是-1,而如果用>>>右移后,高位会用0
来填充,所以就编程了一个正数。
*/
public class W
{
public static void main(String[] args)
{
System.out.println(15>>1);//7
//15D=00001111B 带符号右移一位为 00000111B=7D
System.out.println(-15>>1);//-8
//-15D=11110001B 带符号右移一位为 11111000B=-8D
System.out.println(-15>>>1);//2147483640
//-15D=11111111111111111111111111110001B
//不带符号右移一位为01111111111111111111111111111000=2147483640D
System.out.println(-1>>1);//-1
//-1d=11111111111111111111111111111111B
//带符号右移一位后 11111111111111111111111111111111B=-1D
System.out.println(-1>>>1);//2147483647
//-1d=11111111111111111111111111111111B
//不带符号右移一位后 01111111111111111111111111111111B=2147483647D
System.out.println(-1>>2);//-1
System.out.println(-1>>>2);//1073741823
//-1D=11111111111111111111111111111111B
//不带符号右移两位后 00111111111111111111111111111111B=1073741823D
}
}