一.算术运算符1.基础运算 - * / %加 减 乘 除 取余注意点有小数参与运算时结果可能不精确整数参与运算只能得到整数数值拆分个位数值%10十位数值/10%10百位数值/100%10千位数值/1000%10题目1求四位数各个数位之和import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in new Scanner(System.in); int a in.nextInt(); int c1 a/1000; int c2 a%1000/100; int c3 a%1000%100/10; int c4 a%1000%100%10; System.out.println(c1c2c3c4); } }题目2将输入的数值反向输出import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 int a in.nextInt(); //类似于求水仙花数 int c1 a/1000;//个位 int c2 a%1000/100; //十位 int c3 a%1000%100%10; //千位 int c4 a%1000%100/10; //百位 // 方法使用字符串拼接 String resultStr c3 c4 c2 c1; System.out.println(resultStr); } } }2.自动转换 and 强制转换自动转换取值范围小的数值换成取值范围大的数值自动转换注意和细节1.有多种类型的数据混合运算时系统首先自动将所有数据转换成容量最大的那种数据类型然后再进行计算2当把精度哒的数据类型赋值给精度小的数据类型时就会报错反之就会进行自动类型专函3.byteshort和char之间不会互相自动转换4.byteshortchar 三者之间可以计算但是在计算之前首先需转换成int类型5.boolean 不参与转换6.自动提升原则表达式结果的类型自动提升为 操作数中最大的类型强制转换取值范围大的数值换成取值范围小的数值强转时数据过大会出现错误目标数据类型变量名 目标数据类型被强转的数据byte b1 10; byte b2 20; byte result (byte)(b1b2); // byte计算时先转成int再计算此处是int转byte取值范围排序double float long int short byte3.字符串 and 字符 加操作字符串出现字符串则拼接从左到右依次执行System.out.println(个位数是ge); System.out.println(十位数是shi); System.out.println(百位数是bai);例abctrue abctrue 199七七 100七七 中abctrue 中abctrue字符根据ASCII码找出字符对应的数值进行计算二.其他运算符自增自减运算符自增运算符、自减运算符--int a 10;int b a; //先用后加b10int a 10;int b a; //先加后用b11int a 10;a; // 11;a; // 12;赋值运算符、-、*、/、% 这些运算符底层隐藏了强制类型转换关系运算符、!、、、、运算结果为boolean类型true、false逻辑运算符、 |、 ^、 与 或 异或 非 异或是相同为false不同为true、||效果和与、或相同但有短路效果即左边的表达式能确定结果则右边表达式不用参与运行提高运行效率例int aint bboolean result a5 b 5三元运算符格式关系表达式表达式1表达式2例子a b ? a : b ;过程先计算关系表达式的值为true则结果为表达式1的值为false则结果为表达式2的值三.运算符优先级优先级运算符1. {}2 ~ --3* / %4 -5 6、、、、instanceof7、89^10|1112||13? 14、、-、*、/、%、四、原码、反码、补码重点原码最左边是符号位0正1负正数计算没有问题负数计算有问题反码正数反码为原码负数反码符号位不变其余取反解决原码的负数计算问题补码正数补码为原码负数补码为反码1解决反码负数计算时跨0的问题计算机中的存储和计算都是以补码进行的最大值是第一位为0其他为101111111127最小值全为111111111-127-128只有补码0和-0表示不同