Java基础班 第二天(下)

算数运算符 ,三个代码

class Demo1_Operator {						//operator 运算符
	public static void main(String[] args) {
		/*
		* a:+号在java中有三种作用,代表正号,做加法运算,字符串的连接符
		* b:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
		* c:/获取的是除法操作的商,%获取的是除法操作的余数
		* %运算符
			* 当左边的绝对值小于右边绝对值时,结果是左边
			* 当左边的绝对值等于右边或是右边的倍数时,结果是0
			* 当左边的绝对值大于右边绝对值时,结果是余数
			* %运算符结果的符号只和左边有关系,与右边无关
			* 任何一个正整数%2结果不是0就是1可以用来当作切换条件 
		*/

		System.out.println(10 / 3);				//整数相除结果只能是整数
		System.out.println(10 / 3.0);			//如果想得到小数,把其中一个数变成小数,另一个数在运算的时候会自动类型提升
		System.out.println(-5 % 5);
		System.out.println(13 % -5);
	}
}

第二个代码就是自加自减

第三个代码是测试

class Test1_Operator {
	public static void main(String[] args) {
		//第一题
		/*int a = 10;
		int b = 10;
		int c = 10;
	
		a = b++;					//a = 10 ,b = 11
		c = --a;					//a = 9, c = 9			
		b = ++a;					//a = 10, b = 10	
		a = c--;					//a = 9, c = 8			
		
		System.out.println("a = " + a + ",b = " + b + ",c = " + c);*/

		//第二题
		/*int x = 4;
		//		4	+	6+	60
		int y = (x++)+(++x)+(x*10);

		System.out.println("x = " + x + ",y = " +  y);*/

		//第三题问哪句会报错,为什么 
		byte b = 10;
		//b++;					//b = (byte)(b + 1)
		b = b + 1;				//当byte与int进行混合运算的时候,会提升为int类型,两个int相加的结果还是int,赋值给byte会损失精度
		System.out.println("b = " + b);
		
	}
}

赋值运算符

两个代码 第一个代码比较简单 第二个代码还是存在着类型转换的问题

class Test1_Operator {
	public static void main(String[] args) {
		// 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
		short s=1;s = s+1;			//当short与int进行运算的时候,会提升为int类型,两个int类型相加的结果也是int类型
		//short s=1;s+=1;					//s = (short)(s + 1);

		System.out.println(s);
	}
}

关系运算符  这个没有什么东西 就是大于 小于 不等于 

逻辑运算符  这个代码没有什么东西 就是&和|的关系 还有一个短路&短路|关系,就是真假的一个判断 ,不写代码了 但是最重要的不要搞得反了 & 是与 ,|是或,&两个全为真才是真,|有一个为真就是真,|看这个样子事就是少

位运算符 这个太有意思了  6 按位取反是-7  6的反码补码和原码都一样,取反是x的补码,减1是x的反码,再取反(除了符号位),就是该数

class Demo1_Operator {
	public static void main(String[] args) {
		/*
		* &,|,^,~ 的用法
		* &:有0则0
		* |:有1则1
		* ^:相同则0,不同则1
		* ~:按位取反
		*/

		System.out.println(6 & 3);				//2
		System.out.println(6 | 3);				//7
		System.out.println(6 ^ 3);				//5	
		System.out.println(~6);					//-7?					
	}
}
/*
	110
&	011
-----------
    010

	110
|	011
-----------
    111

	110
^	011
-----------
    101

	00000000 00000000 00000000 00000110		6的原码反码补码都是本身
	11111111 11111111 11111111 11111001		对6取反
-	00000000 00000000 00000000 00000001
---------------------------------------
	11111111 11111111 11111111 11111000		反码
	10000000 00000000 00000000 00000111		原码(-7)
*/
class Demo2_Operator {
	public static void main(String[] args) {
		/*
		* 位异或运算符的特点

		* ^的特点:一个数据对另一个数据位异或两次,该数本身不变。
		*/

		System.out.println(5 ^ 10 ^ 10);
		System.out.println(5 ^ 10 ^ 5);

		/*
		* 请自己实现两个整数变量的交换(不需要定义第三方变量)
		* 注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。
		*/

		int x = 10;
		int y = 5;

		//需要第三方变量,开发推荐用这种
		/*int temp;
		temp = x;
		x = y;
		y = temp;*/

		//不需要定义第三方变量,有弊端,有可能会超出int的取值范围
		/*x = x + y;				//10 + 5 = 15
		y = x - y;				//15 - 5 = 10
		x = x - y;				//15 - 10 = 5*/

		//不需要第三方变量,通过^来做
		x = x ^ y;				// 10 ^ 5 
		y = x ^ y;				// 10 ^ 5 ^ 5	y = 10
		x = x ^ y;				// 10 ^ 5 ^ 10  x = 5

		System.out.println("x = " + x + ",y = " + y);
	}
}
class Demo3_Operator {
	public static void main(String[] args) {
		/*
		*  <<:左移	左边最高位丢弃,右边补齐0
		*  >>:右移	最高位是0,左边补齐0;最高为是1,左边补齐1
		*  >>>:无符号右移 无论最高位是0还是1,左边补齐0
		*  最有效率的算出2 * 8的结果
		*/

		//左移,向左移动几位就是乘以2的几次幂
		//System.out.println(12 << 1);		//24
		//System.out.println(12 << 2);		//48

		/*
		00000000 00000000 00000000 00001100		12的补码
	 (0)0000000 00000000 00000000 000011000		24的补码
	(00)000000 00000000 00000000 0000110000		48的补码
		*/

		//右移,向右移动几位就是除以2的几次幂
		//System.out.println(12 >> 1);
		//System.out.println(12 >> 2);

		/*
		00000000 00000000 00000000 00001100		12的补码
		000000000 00000000 00000000 0000110(0)	6
		0000000000 00000000 00000000 000011(00) 3
		*/

		//最有效率的算出2 * 8的结果
		System.out.println(2 << 3);
	}
}

三元运算符  

这里面三元运算符,前面是一个判别式,如果为真,输出前面的值,如果不为真,输出后面的值,

还有一个就是键盘输入,分为三步,第一步 导包 第二部,创建对象,第三步 接受对象 

猜你喜欢

转载自blog.csdn.net/weixin_40079205/article/details/82916604