反码:11111111 11111111 11111111 11100111 补码:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
1111111111 11111111 11111111 111010(00) 补码
补码:1111111111 11111111 11111111 111010 反码:1111111111 11111111 11111111 111001 原码:1000000000 00000000 00000000 000110
结果:-6
>>>的移动:
计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000 反码:11111111 11111111 11111111 11100111 补码:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000 0011111111 11111111 11111111 111010(00)
结果:1073741818 /*
面试题:
请自己实现两个整数变量的交换 */
class OperatorDemo {
public static void main(String[] args) { int a = 10; int b = 20;
System.out.println(\+a+\+b);
//方式1:使用第三方变量(开发中用的)
int c = a; a = b; b = c;
System.out.println(\+a+\+b); System.out.println(\);
//方式2:用位异或实现(面试用)
//左边:a,b,a //右边:a ^ b
a = a ^ b;
b = a ^ b; //a ^ b ^ b = a a = a ^ b; //a ^ b ^ a = b
System.out.println(\+a+\+b);
//方式3:用变量相加的做法
a = a + b; //a=30 b = a - b; //b=10 a = a - b; //a=20
System.out.println(\+a+\+b);
//方式4:一句话搞定
b = (a+b) - (a=b); //b=30-20=10,a=20 System.out.println(\+a+\+b); } } /*
练习:
获取两个整数中的最大值 获取三个整数中的最大值 比较两个整数是否相同 */
public class OperatorTest {
public static void main(String[] args) { //获取两个整数中的最大值 int x = 100; int y = 200;
int max = (x > y? x: y);
System.out.println(\+max); System.out.println(\);
//获取三个整数中的最大值 int a = 10; int b = 30; int c = 20;
//分两步:
//A:先比较a,b的最大值
//B:拿a,b的最大值再和c进行比较 int temp = ((a > b)? a: b); //System.out.println(temp); max = (temp > c? temp: c);
System.out.println(\+max);
//一步搞定
//int max = (a > b)?((a > c)? a: c):((b > c)? b: c); //这种做法不推荐。
//int max = a > b?a > c? a: c:b > c? b: c; //System.out.println(\ System.out.println(\);
//比较两个整数是否相同 int m = 100; int n = 200;
boolean flag = (m == n); System.out.println(flag); } }
If语句与三目运算符的区别:
由于if语句的第二种格式刚才也完成了三元运算符可以完成的效果。 所以,我们就认为他们可以完成一样的操作。 但是,他们就一点区别没有吗?肯定不是。
区别:
三元运算符实现的,都可以采用if语句实现。反之不成立。
什么时候if语句实现不能用三元改进呢?
当if语句控制的操作是一个输出语句的时候就不能。
为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。
面试题:
字符参与运算
是查找ASCII里面的值 'a' 97 'A' 65 '0' 48
System.out.println('a'); //a System.out.println('a' + 1); //98
字符串参与运算
这里其实是字符串的连接
System.out.println(\+'a'+1); //helloa1 System.out.println('a'+1+\); //98hello System.out.println(\+5+5); //5+5=55 System.out.println(5+5+\); //10=5+5 24.
面试题:
byte可以作为switch的表达式吗? //可以 long可以作为switch的表达式吗? //不可以
String可以作为switch的表达式吗? //JDK7以后可以是字符串 25. 面试题
静态代码块,构造代码块,构造方法的执行顺序? 静态代码块 > 构造代码块 > 构造方法 静态代码块:只执行一次
构造代码块:每次调用构造方法都执行 class Code { //静态代码块 static {
int a = 100;
System.out.println(a); }
//构造代码块 {
int x = 1000;
System.out.println(x); }
//构造方法
public Code(){
System.out.println(\); }
//构造代码块 {
int y = 2000;
System.out.println(y); }
//静态代码块 static {
int b = 200;
System.out.println(b); } }
public class CodeDemo {
public static void main(String[] args) { //局部代码块 {
int x = 10;
System.out.println(x); }
//找不到符号
//System.out.println(x); {
int y = 20;
System.out.println(y); }
System.out.println(\);
Code c1 = new Code();
System.out.println(\); Code c2 = new Code(); } }
输出结果: 10 20
--------------- 100 200 1000 2000 code
--------------- 1000 2000 Code
看程序写结果: class Student { static {
System.out.println(\静态代码块\);