🔥博客主页: A_SHOWY
🎥系列专栏:力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 运算符是一种特殊的符号,用于表示数据的运算、赋值和比较
算数运算符
取模 %的本质: a - (int)a / b * b//当a是小数时
public class Hello {
public static void main(String[] args) {
System.out.println(10 % 3);//1
System.out.println(-10 % 3);//-1
System.out.println(10 % -3);//1
System.out.println(-10 % -3);//-1
}
}
自增
独立语句使用时,++i和i++没有区别的。但是如果作为表达式使用,++i先自增后赋值,++i先赋值后自增。和c++没有区别。注意自增运算符的优先级大于算数运算符。
面试题1:
答:其主要过程为按照规则使用临时变量temp,先将i存到临时变量temp中,再对i进行自增,再把temp赋值给i,所以最后的值为1。
面试题2
答: 其主要过程为按照规则先将i自增,然后 将存到临时变量temp中,再将temp存到i中,最后i的值为2。
关系运算符
关系运算符的结果都是boolean型,要么true要么false ,关系运算符组成的表达式称为关系表达式。
逻辑运算符
用于连接多个条件,最终结果也是boolean值。
分为两组:第一组短路与&& 短路或|| 取反!
第二组与& 逻辑或| 逻辑异或 ^
- 短路与&& 和逻辑与&相比效果相同,但是短路与的效率更高因为在判断第一个为假时,短路与直接判定为false,而逻辑与不管第一个判断如何都对两个进行全部的判断。
- 短路或和逻辑或的思想是类似的,也是遵循这个“短路”的特性,第一个条件为真后边就不判断了。
- 逻辑异或^,两边一真一假不同的才为真。总结为相同为真不同为假
赋值运算符
+= -= *= /= 和c++一模一样
复合赋值运算符会进行类型的转换
byte b = 3;
b += 2;//b = byte(b + 2);等价,底层有一个类型转换
三元运算符
条件表达式?表达式1:表达式2
- 如果条件表达式为真,运算后的结果是表达式是1,否则是2
- 表达式1和表达式2为可以赋给接收变量的类型(或可以自动转换)
int c = a > b ? 1.1 : 2.6;//错误的
-
它的本质是if else 语句
-
例子:三个数,寻找最大值,用一句语句
int max = (n1 > n2 ? n1 : n2) > n3 ? (n1 > n2 ? n1 : n2) : n3;
关于运算符优先级
- 只有单目运算符和赋值运算符是从右向左运算
- 大致分为(1)(),{}等(2)单目运算:++ -- ^ !(3)算数运算符:+ -(4)位移运算符:>> <<<(5)比较运算符(6)逻辑运算符(7)三元运算符(8)赋值运算符
标识符的命名规格和规范
规则:
- 由26个英文字母大小写,0-9或$组成
- 数字不能开头,不能用关键字和保留字,但是可以包含
- 严格区分大小写,长度无限制
- 标识符不能包含空格
规范:
- 包名多单词组成时所有字母小写
- 类名和接口名所有单词的首字母大写XxxYyyZzz(大驼峰)
- 变量名和方法名xxxYyyZzz(小驼峰)
- 常量名:所有字母都大写
例子:
import java.util.Scanner;//引入scanner类所在的包
public class Hello {
public static void main(String[] args) {
//创建Scanner类的对象,scanner就是Scanner类的对象
Scanner scanner = new Scanner(System.in);
System.out.println("请输入姓名");
String name = scanner.next();
System.out.println("请输入年龄");
int age = scanner.nextInt();
System.out.println("请输入成绩");
double score = scanner.nextDouble();
System.out.println("name: " + name + "\t" + "age: " +age + "\t" + "score: " + score);
}
}
进制
- 二进制:只用0 和1 来表示一个数 开头0b/0B
- 十进制
- 八进制:以数字0开头
- 十六进制:0-9 A-F来表示数,用0x打头
进制的转换
第一组:其他进制转十进制
二进制转十进制 例:0b1011:1 * 2的零次方 + 1 * 2的一次方 + 1 * 2的三次方 = 11
八进制转十进制 例:0234 : 4 * 8的零次方 + 3 * 8的一次方 + 2 * 8的二次方 = 156
十六进制转十进制 例:0x23A:10 * 16的零次方 + 3 * 16的一次方 + 2 * 16的二次方 = 570
第二组:十进制 转成其他进制
十进制转二进制:例: 34
十进制转八进制:例:131(同理)得:0203
十进制转十六进制:例:237(同理)得:0xED
第三组:不同进制间的转换
二进制转八进制和16进制:0b11010101
转八进制:每三位一组,转成对应的八进制数0325
转十六进制:每四位一组,转成对应的十六进制数 0xD5
八进制转二进制:八进制每一位数,转成一个对应的3位二进制数 例:0237
02(010)3(011)7(111) ——> 0b10011111
十六进制转二进制:十六进制每一位数转成4位的二进制数 例:0x23b
0x2(0010)3(0011)b(1011)——> 0b1000111011
原码 反码 补码
对于有符号的数,有8个原则:
- 二进制的最高位是符号位,0代表正数,1代表负数
- 正数的原码、反码、补码都是一样的
- 负数的反码是符号位不变,其他位取反(0变1 1变0)
- 负数的补码是反码+1 ,负数的反码等于补码-1
- 0的反码补码都是0
- java的数都是有符号的数
- 计算机运算时候,都是以补码的方式进行运算的
- 看运算结果的时候要看它的原码(运算看补码,结果看原码)
位运算符:
java 中有7个
例:
(很重要)
>> 算数右移:低位溢出,符号位不变
<<算数左移:低位补0,符号位不变
>>>逻辑右移:低位溢出,高位补0,没有<<<符号
练习:文章来源:https://www.toymoban.com/news/detail-807974.html
int i = 66;
System.out.println(i++ + i);//133,i++ 被用在表达式中,它的值是 66(使用当前值,然后增加 1,但在这个表达式中使用的是当前值)。
int i = 66;
System.out.println(++i + i);//134
文章来源地址https://www.toymoban.com/news/detail-807974.html
到了这里,关于JAVA学习笔记——第四章 运算符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!