码迷,mamicode.com
首页 > 其他好文 > 详细

02003_day02练习

时间:2018-01-01 18:11:21      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:post   一个   byte   short   没有   pre   编译器   out   技术   

1、题目:下面那句代码是编译失败的?为什么? 

1 byte b1=3,b2=4,b;
2 b=b1+b2;
3 b=3+4;

  (1)分析:

    ①第一句定义变量b1、b2和b,其中b1赋值3,b2赋值4,没有问题;

    ②第二句b=b1+b2;中的b1+b2是int类型(Java中整数默认是int类型),应该改为b=(byte)b1+b2; ;

    ③第三句b=3+4;中的3+4是常量,具有常量优化机制,可以直接识别为byte,所以正确。

  (2)答案:

    ①第二句话正确;

    ②b=b1+b2;中,b是byte类型,而b1+b2是int类型,范围由大转小需要进行强制转换,需要改成b=(byte)b1+b2; 。

2、题目:byte by=130; 这句代码有没有问题?有问题如何解决?结果是多少?

  (1)分析:

    ①byte的取值范围是-128~127,130超出了这个范围,所以不会成功进行编译;

    ②byte by=130; 这句代码的左边为byte类型,右边为int类型,需要进行强制转换,改成byte by=(byte)130; ;

    ③由原码、反码、补码相关知识得知,b=-126 。

  (2)答案:

    ①有问题;

    ②改为byte by=(byte)130; ;

    ③结果为:-126 。

3、题目:下面那句代码是编译失败的?为什么?

1 byte b = 10;
2 b++;
3 b = b + 1;

  (1)分析:

    ①第一句byte b=10; 由于编译器进行了常量优化,没有问题;

    ②第二句b++; b进行了自增,b=11 ;

    ③第三句b = b + 1; 左边b是byte类型,右边b+1; 中b是byte类型,b+1是byte类型和int类型,结果是int类型,需要进行强制转换,应该改为b=(byte)(b+1); 。

  (2)答案:

    ①第三句代码编译失败;

    ②b = b + 1; 左边b是byte类型,右边b+1; 中b是byte类型,b+1是byte类型和int类型,结果是int类型,需要进行强制转换;

    ③第三句代码应该改为b=(byte)(b+1); 。

4、题目:short s = 1; s = s + 1;有没有问题?如果有怎么解决?

  (1)分析:

    ①第一句代码是定义short变量s,并赋值1,没有问题;

    ②第二句代码s = s + 1;左边是short类型,右边s+1; 是short类型和int类型相加结果是int类型,需要进行强制转换;

    ③应该改成s=(short)(s+1); 。

  (2)答案:

    ①有问题;

    ②第二句话改成s=(short)(s+1); 。

5、题目:short s = 1; s += 1;有没有问题?如果有怎么解决?

  (1)分析:

    ①第一句代码short s = 1; 定义了short变量s,并赋值1,没有问题;

    ②第二句代码s += 1; 由于赋值运算符+=进行了自动强制类型转换,所以没有问题。

  (2)答案:没有问题。

6、题目:分析以下需求,并用代码实现

  (1)已知一个三位数,请分别获取该三位数上每一位的数值;

  (2)例如:123的个位、十位、百位,分别是3、2、1;

  (3)打印格式"数字123的个位是 3, 十位是 2, 百位是 1" 。

  (4)分析:

    ①123的百位数1:123/100;

    ②123的十位数2:123%100=23,23/10 ;

    ③123的个位数3:123%100=23,23%10=3

  (5)代码实现:

 1 public class NumDemo {
 2     public static void main(String[] args) {
 3         int num = 123;
 4         // 百位数
 5         int hd = num / 100;
 6         // 十位数
 7         int td = num % 100 / 10;
 8         // 个位数
 9         int od = num % 100 % 10;
10         System.out.println("数字123的个位是" + od + ",十位是" + td + ",百位是" + hd);
11     }
12 
13 }

  运行结果:

  技术分享图片

7、题目:看程序说结果,请不要提前运行。  

1 public class Test1 {
2     public static void main(String[] args) {
3         int x = 4;
4         int y = (--x) + (x--) + (x * 10);
5         System.out.println("x = " + x + ",y = " + y);
6     }
7 }

  (2)分析:

    ①第三句代码,定义了int变量x,并赋值4;

    ②第四句代码,--x为4-1=3,x--为3,x*10为2*10=20 ,所以y=3+3+20=26 ;

    ③第5句代码,输出x=2,y=26 。

  (3)答案:

    x=2,y=26

    

02003_day02练习

标签:post   一个   byte   short   没有   pre   编译器   out   技术   

原文地址:https://www.cnblogs.com/gzdlh/p/8167731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!