java基础2【运算符,交换值,变量】

运算符

算术运算符

% 取模运算 - 取余运算

%的结果的正负看的是%左边数据的正负 -> 如果左边的数字是一个正数,那么结果就是正数;反之,那么结果就是负数

++/-- 自增/自减运算

i++ (先赋值后使用) ++i(先使用后赋值)

byte/short/char可以参与赋值运算

int i = 7;
// 相当于在原来的基础上来自加1
// 先将i的值7取出来标记为结果,然后i自增为8,最后再将7赋值给j
// int j = i++;
// 先将i自增为8,然后再将i的值赋值给j
// int j = ++i;
// 先将i的值7取出来参与后续运算,然后i自增为8,用7参与乘法运算,结果就是14,最后将计算的14赋值给j
// int j = i++ * 2;
// 先将i自增为8,然后将8取出来参与乘法运算,结果结果是16
int j = ++i * 2;

ASCII码表:
‘a’ ~ ‘z’ -> 97~122 ‘A’ ~ ‘Z’ -> 65~900~9-> 48~57
赋值运算符

= += -= *= /= %= &= |= ^= <<= >>= >>>=

byte/short/char可以参与赋值运算

除了=以外,其余的符号都要求这个变量得先有值

int i = j = k = 10;错 int i,j,k; i = j = k =10;对

注意:在Java中不支持连等定义但是支持连等赋值

int i = 5;

i += i *= i -= 3; -> 15

i = 5 + (5 * (5 - 3));从左往右依次运算,i的值没变。

关系/比较运算符

==相等 !=不等 > < >= <=

注意:不支持连着的比较方式

逻辑运算符

&与 |或 !非 ^异或 &&短路与 ||短路或

注意:逻辑运算符算的是逻辑值

^异或 — 相同为false,不同为true

注意:||如果在&&的前边可以把&&短路掉

位运算符

注意:位运算符针对整数的补码进行运算,所以运算结果也是补码

& | ^ << >> >>> ~取反
在这里插入图片描述
在这里插入图片描述

三元运算符

三元表达式中的两个式子的结果类型必须能够转化
格式:逻辑值 ? 表达式1 : 表达式2
执行顺序:先执行逻辑值,如果逻辑值为true,则执行表达式1;反之则执行表达式2
三元表达式本身是一个表达式,意味着这个表达式执行完成之后需要有一个结果 — 这个结果必须能定义对应类型的变量来接住
a > b ? “abc” : true; -> 没有办法定义一个统一类型的结果来存储,这种写法就是错误的
int max = i > j ? i : j; 两个数中的最大值
int max = i > j ? (i > k ? i : k) : (j > k ? j : k); 三个数中的最大值 (嵌套)

运算符的优先级

~ ! ++ – * / % + - << >> >>> 关系 逻辑 & | ^ 三元 赋值
(~ ! ++ --)一元(* / %)(+ -)( << >> >>> )关系 逻辑 ( & | ^ )(二元)三元 赋值
一元 > 二元 > 三元 > 赋值

交换值的方式

方式一:异或法
int i = 5, j = 9;
i = i ^ j;
j = i ^ j; -> j = i ^ j ^ j; -> j = i;
i = i ^ j; -> i = i ^ j ^ i; -> i = j;
方式二:加减法
int i =5, j = 9;
i = i + j;
j = i - j; -> j = i + j - j; -> j = i;
i = i - j; -> i = i + j - i; -> i = j;
方式三:追尾法
int i = 5, j = 9;
int temp = i;
i = j;
j = temp;
总结:三种方式的比较
异或法的效率是最高的。只能针对整数进行交换,局限性太大
加减法的效率是低于异或但是高于追尾。理论上可以交换数值类型,但实际上很少用于交换小数
追尾法的效率是最低的。可以交换任意一个类型的值

变量

在程序中用于存储数据的容器。
变量不能重名。
变量必须先定义后使用
变量必须先给值后使用
变量必须在哪儿定义就在哪儿使用
扩展:计算机存储单位

注意
  如果if中的代码块只有1句话,那么可以省略{}不写
  import java.util.Scanner;
  Scanner s = new Scanner(System.in);
  int i = s.nextInt(); // 获取整数
  double d = s.nextDouble(); // 获取小数
  String str = s.next(); // 获取字符串
  
  注意:基本类型和包装类的区别 int 和 Integer 等
  注意:规定用 0表示当前类型的最小值

小知识

		byte b = 127;
		// 在底层自动做了一次强制转换
		b++;
		System.out.println(b);
		// byte b = 130;
		// 3和5是两个字面量,字面量在参与运算的时候会自动的优化
		// 在编译时期就会自动计算
		// byte b = 8;
		// byte b = 3 + 5;
		// System.out.println(b);
每一个二进制数字称之为1位 --- bit - b
字节 - Byte - B  1B = 8b
千字节 - kilobyte - KB 1KB = 210B = 1024B
兆字节 - MB -> GB -> TB -> PB
8Mb = 1MB
100Mb = 12.5MB
3GB = 3000MB --- 在通信领域是按照千进制计算
1 2 4 8 16 32 64 128 256 512   300 -> 100101100  转二进制时,可以从最高位开始逐位往下推。
0111 1111 -> 127  1111 1111 -> -127  1000 0000 -> -128 == -0(负)  0000 0000 -> 0(正)
-128 的原、反、补码是一样的!(规定)
5 << 32 = 5   移位的位数 % 32 后是一样的。 5 << 35 = 40
0111 1111 ->127 + 1 = 1000 0000 -> -128(-0) + 1 = -127 大类型转换为小类型,因为字节的损失可能导致数据不精确,因为可能会产生负数。计算机里大转小就是这么转圈玩的。
只有2^0才肯能是1,所以1 2 4 8 ……,奇数的补码末位是1,偶数是0,无论正负!
整数可以自动转化为小数,可能会产生精度损失,会四舍五入!大数字自动用科学计数法了。
小数转二进制可能是无限的,除了小数是1/2^n,但计算机的内存是有限的,所以会产生误差。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值