java几个简单问题! 20
1。以下代码都省略了开头doublea=3.1251111111;doubleb=1.0417037037;System.out.println((a/3)==b);Sy...
1。以下代码都省略了开头
double a = 3.1251111111;
double b = 1.0417037037;
System.out.println((a/3)==b);
System.out.println((b*3)==a);
怎么这两个数相等都是输出false?
2
int a=0123;
int b=123;
System.out.println(a);
System.out.println(b);
输出a=83?为什么是83呢?
3
int b = 3;
int s = 4;
s = s+++b;
System.out.println(s);
为什么上面的b无论是++b还是b++都是输出7?
4
byte b = 3;
short s = 4;
s = s+b++;
System.out.println(s);
输出可能损失精度? 展开
double a = 3.1251111111;
double b = 1.0417037037;
System.out.println((a/3)==b);
System.out.println((b*3)==a);
怎么这两个数相等都是输出false?
2
int a=0123;
int b=123;
System.out.println(a);
System.out.println(b);
输出a=83?为什么是83呢?
3
int b = 3;
int s = 4;
s = s+++b;
System.out.println(s);
为什么上面的b无论是++b还是b++都是输出7?
4
byte b = 3;
short s = 4;
s = s+b++;
System.out.println(s);
输出可能损失精度? 展开
8个回答
展开全部
一楼不懂请不要乱教人家
1.JAVA里double 的这种除法运算是有可能损失精度的。比如有时0.1可能会输出成0.09999999...
解决这种问题的办法是double a = 3.1251111111;b=a/3;这样就能相等了
2.int a=0123;JAVA里以0开头赋值的话他会当成是八进制,0x开头是16进制,所以123转换成8进制为83.
3. s+++b;由于++的优先级高于+,所以实际上是这样运算的。(s++)+b.由于是后++所以是先运算赋值,再自加,所以运算顺序 是这样的,s+b=7,s=7,然后右边的3再++,(虽然没有意义)。
所以输出的是7
4.byte和short相加默认会转换成int,所以会报出语法错误不能把int转换成short,解决办法:
s = (short) (s+b++);
有不懂可以HI我
1.JAVA里double 的这种除法运算是有可能损失精度的。比如有时0.1可能会输出成0.09999999...
解决这种问题的办法是double a = 3.1251111111;b=a/3;这样就能相等了
2.int a=0123;JAVA里以0开头赋值的话他会当成是八进制,0x开头是16进制,所以123转换成8进制为83.
3. s+++b;由于++的优先级高于+,所以实际上是这样运算的。(s++)+b.由于是后++所以是先运算赋值,再自加,所以运算顺序 是这样的,s+b=7,s=7,然后右边的3再++,(虽然没有意义)。
所以输出的是7
4.byte和short相加默认会转换成int,所以会报出语法错误不能把int转换成short,解决办法:
s = (short) (s+b++);
有不懂可以HI我
展开全部
1.double有它自己的精度,当你赋值给它时,可能并没有达到它的精度,但是如果是它自己运算出来的就使用默认的精度,a/3=1.0417037036999999明显和b不等,同理b*3=3.1251111111000003
2.说明:由于你在123前面有0,所有jvm会认为此为8进制,16进制是0x,所有它会:3+2*8+1*8^2=83
3.++运算符的优先级大于+,所以+++的意思是(s++)+b,结果自然是7,如果是s+b++,结果也自然是7,这种题目没意思,加个括号就可以解决
4.b++,相当于b+1,所有其结果会自动提升为int类型,再将其与s运算,结果也是int型,所以赋值给short s的时候,自然会损失精度。
2.说明:由于你在123前面有0,所有jvm会认为此为8进制,16进制是0x,所有它会:3+2*8+1*8^2=83
3.++运算符的优先级大于+,所以+++的意思是(s++)+b,结果自然是7,如果是s+b++,结果也自然是7,这种题目没意思,加个括号就可以解决
4.b++,相当于b+1,所有其结果会自动提升为int类型,再将其与s运算,结果也是int型,所以赋值给short s的时候,自然会损失精度。
参考资料: 自己脑袋
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1) (a/3)=1.0417037036999999;(b*3)=3.1251111111000003所以a与b都为flash;
2) 0123是八进制的表示,换算为10进制是83;
3) b++ 是后自增,先使用b的值,再b+1;++b为前自增,先b+1再使用b的新值;
4) 损失精度
2) 0123是八进制的表示,换算为10进制是83;
3) b++ 是后自增,先使用b的值,再b+1;++b为前自增,先b+1再使用b的新值;
4) 损失精度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.你的System.out.println有问题,应为
System.out.println(“a/3{0}=={b}”,a/b,b);
第二个println也是这样
2.int a=0123;这个赋值是错误的,0123不是一个整数,你的输出能够等于83,已经很给力了。
3.s = s+++b;这里不能写作++b,或b++,程序还是把它看成s=s+b
正确的是
int b = 3;
int s = 4;
b++;
s = s+b; 或s+=b;
System.out.println(s);
4.s = s+b++;错误和第三题一样,语法规则不允许你这样写
System.out.println(“a/3{0}=={b}”,a/b,b);
第二个println也是这样
2.int a=0123;这个赋值是错误的,0123不是一个整数,你的输出能够等于83,已经很给力了。
3.s = s+++b;这里不能写作++b,或b++,程序还是把它看成s=s+b
正确的是
int b = 3;
int s = 4;
b++;
s = s+b; 或s+=b;
System.out.println(s);
4.s = s+b++;错误和第三题一样,语法规则不允许你这样写
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.在进行计算时,计算机内部使用的精度是有限的。
2.因为0123表示的是八进制数,所以转换成十进制的话是83
3.s+++b因为++的优先级高于+,所以先算++,如果是++b,表达式就是s+++b,就是先算++,(s++)+b;先s使用,再自加,如果是b++,表达式就是s+b++,先算b++,s+(b++),b++先使用b的值,再自加
4.s是什么类型的。默认是int型。由小的转为大的,不会损失精度。
2.因为0123表示的是八进制数,所以转换成十进制的话是83
3.s+++b因为++的优先级高于+,所以先算++,如果是++b,表达式就是s+++b,就是先算++,(s++)+b;先s使用,再自加,如果是b++,表达式就是s+b++,先算b++,s+(b++),b++先使用b的值,再自加
4.s是什么类型的。默认是int型。由小的转为大的,不会损失精度。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询