What results from the following code fragment?
翻译:以下代码片段的结果是什么?
int i = 5;
int j = 10;
System.out.println(i + ~j);
A.Compilation error because”~”doesn’t operate on integers
B.-5
C.-6
D.15
解析:
属于一元运算符。
运算规则:将后面的数的补码逐位取反(0变1,1变0,符号位也要变哦)
公式-n= ~n + 1可推出 ~ n = - n - 1。
所以~10=-11再加5结果为-6。
在Java中,所有数据的表示方法都是以补码的形式表示,如果没有特殊说明,Java中的数据类型默认是int,int数据类型的长度是四个字节,一字节是八位,就是32位,32bit.
~这个符号是计算机在计算,下面是原理:
众所周知,计算机本身储存的都是二进制的补码;
那么10的补码就是10的原码(因为正数的原反补一样):0000 0000 0000 1010——这是补码,因为现在是计算机在计算,将10转换成了补码。
~10的补码就是:1111 1111 1111 0101—— '~'这个符号按位取反(符号位也要取反)
~10的反码就是:1111 1111 1111 0100——补码减1(因为它符号位为1,是负数,反码求补码 + 1)
~10的原码就是:1000 0000 0000 1011——反码取反:这个才是正常二进制数,换算为整数为-11
原码才可以对应为正常的整数,补码只有转换为原码才能被正常人类识别。
带~的数的计算机的运算过程:(这只是 ~正数的过程)
1、对原数的二进制每位数依次取反,得到结果的补码;
2、通过对结果的补码减一,得到结果的反码;(看符号位,判断是真还是负)
3、最后通过对结果的反码取反,得到结果的原码,这就是我们要的二进制数。
补充:
带~的负数的运算过程:
举个简单的例子:~(-3)
-3的原码:1000 0011 —— 十进制转换成二进制
-3的反码:1111 1100 —— 原码符号位不变,其它位按位取反
-3的补码:1111 1101 —— 反码末位加一
~(-3)的补码:0000 0010
因为符号位为0,所以正数,原码反码补码一样
即~(-3)的原码:0000 0010
即~(-3)= 2;
参考资料:
原码,反码,补码的关系
下面的程序输出的结果是( )
public class A implements B{
public static void main(String args[]){
int i;
A a1=new A();
i =a1.k;
System.out.println("i="+i);
}
}
interface B{
int k=10;
}
A.i=0
B.i=10
C.程序有编译错误
D.i=true
解析:
java接口中变量的默认修饰符为 public static final
java中定义全局常量,通常使用public static final修饰,接口中可不写修饰符。
java接口中方法的默认修饰符为 public abstract
接口中不存在变量,只有常量,默认为public static final
,要么不写,要么只能出现这个修饰词中的一个或多个这个来修饰“变量”,接口中方法也是要么不写,要么只能出现这个修饰词中的一个或多个这个来修饰“方法”。
则接口实际上是由常量和抽象方法构成的特殊类。
补充:
1.final关键词修饰变量时,声明时变量必须初始化。
2.类中的全局变量:声明时可以不初始化,因为再声明时,java虚拟机(JVM)为其赋默认值。
3.方法中的局部变量:声明时可以不初始化,但是使用之前要初始化。
易错点:
1.定义接口使用的关键字是interface。
2.一个类可以继承一个类和实现多个接口。
Java的跨平台特性是指它的源代码可以在多个平台运行。()
正确答案: B 你的答案: B
A.正确
B.错误
解析:
JAVA的跨平台特性表述为“一次编译,到处运行”,JAVA程序运行在JVM上,而JVM对上屏蔽了底层操作系统差异。
“write once,run everywhere ”指的是编译后的字节码可以跨平台执行,也就是.class文件,而不是.Java源文件。
跨平台是指可以在一个平台上编写和编译程序,而在其它平台上运行。保证java跨平台性的机制为字节码文件(.class文件)和java虚拟机(其主要作用)。java程序被编译后不是生成能在硬件平台上可执行的代码,而是生成了字节码文件。不同的硬件平台会安装不同的jvm,由jvm负责把字节码翻译成硬件平台能执行的代码。
Java 构造方法有以下特点:
方法名必须与类名相同
可以有 0 个、1 个或多个参数
没有任何返回值,包括 void
默认返回类型就是对象类型本身
只能与 new 运算符结合使用
注意:构造方法不能被 static、final、synchronized、abstract 和 native(类似于 abstract)修饰。即不能被非访问修饰符修饰,可以被访问修饰符修饰。
参考文章:
牛客评论
小伙伴们,有没有觉得收获满满,我写时,我感到很充实,我学到了~用法,复习了原反补码的转换,接口的成员的修饰,构造方法的特点。
觉得可以的小伙伴,记得点个赞哟
日期:2021.4.19