day03-----------java 语言基础(基础语法)(传智视频)


1:在定义Long或者Float类型变量的时候,要加L或者f。
  整数默认是int类型,浮点数默认是double。
  byte,short在定义的时候,他们接收的实际上是一个int类型的值。
  这个是本身作了一个数据检测的,若是再也不它们的范围内,就报错。
2:byte值的问题
byte b1 = 127;
byte b2 = (byte)128; //-128
byte b3 = (byte)129; //-127
byte b4 = (byte)130; //-126

byte的范围:-128 ~ 127
128:10000000
-128:10000000 (这里的1便是符号位,也是数值位)
3:数据类型转换之默认转换
byte,short,char -- int -- long -- float -- double
long: 8个字节
float:4个字节
举例:
17.625在内存中的存储
首先要把17.625换算成二进制:10001.101
整数部分,除以2,直到商为0,余数反转。
小数部分,乘以2,直到乘位0,进位顺序取。
在将10001.101右移,直到小数点前只剩1位:
1.0001101 * 2^4 由于右移动了四位
这个时候,咱们的底数和指数就出来了
底数:由于小数点前必为1,因此IEEE规定只记录小数点后的就好。因此,此处的底数为:0001101
指数:实际为4,必须加上127(转出的时候,减去127),因此为131。也就是10000011
符号部分是整数,因此是0
综上所述,17.625在内存中的存储格式是:
01000001 10001101 00000000 00000000
A:它们底层的存储结构不一样。
B:float表示的数据范围比long的范围要大
long:2^63-1
float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1

4:Java语言中的字符char能够存储一个中文汉字吗?为何呢?
能够。由于java语言中的字符占用两个字节。
Java语言采用的是Unicode编码。

                System.out.println(x/y); //整数相除只能获得整数
//我就想获得小数,该肿么办呢?
//只须要把操做的数据中任意的一个数据变为浮点数
System.out.println(x*1.0/y);
注意事项:
A:整数相除只能获得整数。若是想获得小数,必须把数据变化为浮点数类型
B:/获取的是除法操做的商,%获取的是除法操做的余数

&&和&的区别? 同理||和|的区别?
A:最终结果同样。
B:&&具备短路效果。左边是false,右边不执行。
开发中经常使用的逻辑运算符:&&,||,!

~按位取反运算符:0变1,1变0(System.out.println(~3))
		00000000 00000000 00000000 00000011
	   ~11111111 11111111 11111111 11111100 (补码)
	   
	   补码:11111111 11111111 11111111 11111100
	   反码:11111111 11111111 11111111 11111011(补码减1)
	   原码:10000000 00000000 00000000 00000100(反码符号位不变,其余位置0变1,1变0)
	结果是:-4
(正数的原反补都相同)

/*
	^的特色:一个数据对另外一个数据位异或两次,该数自己不变。
*/
class OperatorDemo2 {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		
		System.out.println(a ^ b ^ b); //10
		System.out.println(a ^ b ^ a); //20
	}
}
/*
	面试题:
		请本身实现两个整数变量的交换
		注意:之后讲课的过程当中,我没有明确指定数据的类型,默认int类型。
*/
//方式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:"+a+",b:"+b);
		*/
//方式4:一句话搞定
		b = (a+b) - (a=b); //b=30-20=10,a=20
		System.out.println("a:"+a+",b:"+b);
		
/*
	<<:左移	左边最高位丢弃,右边补齐0
	>>:右移	最高位是0,左边补齐0;最高为是1,左边补齐1
	>>>:无符号右移 不管最高位是0仍是1,左边补齐0
	
	面试题:
		请用最有效率的方式写出计算2乘以8的结果?
			2 * 8
			
			2 << 3

*/
class OperatorDemo3 {
	public static void main(String[] args) {
		//<< 把<<左边的数据乘以2的移动次幂
		System.out.println(3 << 2); //3*2^2 = 3*4 = 12;
	
		//>> 把>>左边的数据除以2的移动次幂
		System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6
		System.out.println(24 >>> 2);
		
		System.out.println(-24 >> 2); 
		System.out.println(-24 >>> 2);
	}
}
/*
	计算出3的二进制:11
		00000000 00000000 00000000 00000011
	(00)000000 00000000 00000000 0000001100
		
	>>的移动:	
	计算出24的二进制:11000
		原码:10000000 00000000 00000000 00011000
		反码: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)
		
		结果:
*/

//报错
		//int z = ((x = y)? x : y);//结果是一个boolean类型。
		
if语句第一种格式:  if(关系表达式) {
                        语句体   
                        } 
if语句第二种格式:  if(关系表达式) { 
                           语句体1;   
                   }else {   
                        语句体2;  
                   }      
if语句第三种格式:  if(关系表达式1) {
                            语句体1;  
                    }else  if (关系表达式2) {    
                            语句体2;
                    }     
                     …  
                     else { 
                            语句体n+1;  
                     }
相关文章
相关标签/搜索