实验三 Java语言基础
第一题:
实验学时 2学时
实验内容
改错并分析程序运行结果
(1) 修改程序中的编译错误
(2) 不运行程序,分析程序的运行结果
(3) 运行程序,验证分析结果是否正确
改错后:
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=2;
int b=-3;
System.out.println("a是否大于b:"+(a>b));
boolean c=a>b;
System.out.println("a是否大于b:"+c);
int d;
d=(a>b)?1:0;
System.out.println("a是否大于b(1:大于,0:不大于):"+d);
char s='A';
d=a+s;
System.out.println(d);
System.out.println((char)d);
s=(char)(s+3);
System.out.println("A后面的第3个字母是:"+s);
}
2. 分析下面程序的运行结果
public static void main(String[] args) {
int a=3;
int b=100;
System.out.println("3的二进制是:"+Integer.toBinaryString(a));
System.out.println("取反: "+Integer.toBinaryString(~a));
System.out.println("取反+1=: "+Integer.toBinaryString(~a+1));
System.out.println("-3的二进制是:"+Integer.toBinaryString(-3));
System.out.println("-100的二进制是:"+Integer.toBinaryString(-100));
System.out.println("-100逻辑左移4位是:"+(-100<<4));
System.out.println("-100逻辑左移4位是:"+Integer.toBinaryString(-100<<4));
System.out.println("-100逻辑右移4位是:"+(-100>>4));
System.out.println("-100逻辑右移4位是:"+Integer.toBinaryString(-100>>4));
System.out.println("-100算术右移4位是:"+(-100>>>4));
System.out.println("-100算术右移4位:0000"+Integer.toBinaryString(-100>>>4));
System.out.println("-100算术右移4位是: "+Integer.toBinaryString(-100>>>4));
}
分析:Integer.toBinaryString是指Integer类型中的静态方法toBinaryString,这个方法是将十进制转换为二进制输出。
第一个Integer.toBinaryString(a)是输出3的二进制所以为11
第二个是a的取反运算,反码是吧0换成1,1换成0,因此为11111111111111111111111111111100
第3个是把a的反码加1,因此为11111111111111111111111111111101
第4个是求-3的二进制为11111111111111111111111111111101
第5个是求-100的二进制为11111111111111111111111110011100
第6个-100逻辑左移4位,最高位缺失4位最低位补4个0,对应的十进制为-1600
第7个是求-1600的二进制
第8个-100逻辑右移4位,最低位缺失4位且原二级制最高位为1所以左边补4个1,对应的十进制为-7
第9个是求-7的二进制
第10个是算术右移对于的十进制,符号位也要一起右移且左边要补上符号位,因此为268435449
第11个在输出268435449的二进制前加上了0000
第12个输出了268435449的二进制
3. 分析下面程序的运行结果
public class Client {
public static void main(String[] args) {
int a = 20;
int b = -10;
System.out.println("20的二进制是:" + Integer.toBinaryString(a));
System.out.println("-10的二进制是:" + Integer.toBinaryString(b));
System.out.println("a&b的二进制是:" + Integer.toBinaryString(a & b));
System.out.println("a&b的十进制是:" + (a & b));
System.out.println("a|b的二进制是:" + Integer.toBinaryString(a | b));
System.out.println("a|b的十进制是:" + (a | b));
System.out.println("a^b的二进制是:" + Integer.toBinaryString(a ^ b));
System.out.println("a^b的十进制是:" + (a ^ b));
}
}
分析:第一个是要转换为a即20的二进制
第二个是要转换为b即-10的二进制
第三个是按位与运算符,即如果两个相应的二进制位都为1,则该位的结果值为1,否则为0,所以结果为10100
第四个为10100对应的十进制
第五个是按位或运算符,即如果两个相应的二进制位中只要有一个1,则该位的结果值为1,否则为0,所以结果为11111111111111111111111111110110
第六个为第五个对应的十进制-10
第七个是按位异或运算符,即如果两个相应的二进制位相同,则该位的结果值为0,否则为1,所以结果为11111111111111111111111111100010
第八个为第七个对应的十进制-30