Java算数运算符的使用
1.%的本质:看成一个公式:a % b = a - a / b * b【当a是小数时,公式=a-(int)a/b*b】有小数运算时,得到的结果是近似值,要用差值的绝对值在某个范围来判断是否相等,是要用一个精度来判断是否相等
2.自增:++
作为独立的语句使用时,前++和后++都完全等价于i=i+1;
作为表达式使用
- 前++:++i先自增后赋值
- 后++:i++先赋值后自增
3.--,+,-,*是一个道理,完全可以类推
面试题
1.
int i = 1;
i=i++;//先赋值后自增。(1)temp=i;(2)i=i+1;(3)i=temp;
system.out.println(i);//1
2.
int i = 1;
i = ++i;//先自增后赋值。(1)i=i+1;(2)temp=i;(3)i=temp;
system.out.println(i);//2
关系运算符
逻辑运算符
赋值运算符的特点
- 运算顺序 int num = a + b + c;
- 赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值int num = 20;int num2 = 78 * 34 - 10;int num3 = a;
- 复合赋值运算符等价于这样的效果。如:a+=3;等价于a=a+3;其他类推
- 复合赋值运算符会进行类型转换
byte b = 2; b+=3;//等价于b = (byte)(b + 2); b++;//等价于b = (byte)(b + 1);
三元运算符ternaryoperator
条件表达式?表达式1:表达式2;
运算规则:
1.如果条件表达式为true,运算后的结果是表达式1;
2.如果条件表达式为false,运算后的结果是表达式2;
口诀:【一灯大师,一真大师】
int a = 10;
int b = 99;
int result = a > b ? a++ : b--;//如果a > b为真就返回a++,如果为假就返回b--
运算符的优先级
- (),{}等
- 单目运算 ++,--
- 算术运算符
- 位移运算符
- 比较运算符
- 逻辑运算符
- 三元运算符
- 字符运算符
标识符的命名规则和规范
1) 包名:多单词组成时所有字母都小写:aaa.bbb.ccc //比如 com.hsp.crm
2) 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz [大驼峰] 比如: TankShotGame
3) 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [小 驼峰, 简称 驼峰法] 比如: tankShotGame
4) 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ 比如 :定义一个所得税率 TAX_RATE
5) 后面我们学习到 类,包,接口,等时,我们的命名规范要这样遵守,更加详细的看文档
键盘输入语句
- 介绍:在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java,需要一个 扫描器(对象),就是Scanner
- 步骤:
- 导入该类的所在包,java.until.*
- 创建该类对象(声明变量)
- 调用里面的功能
- 案例演示:要求:可以从控制台接收用户信息,【姓名,年龄,薪水】
-
import java.util.Scanner;//表示把java.util下的Scanner类导入,导入才能使用 public class input{ //编写一个main方法 public static void main(String[] args){ //演示接受用户的输入 //步骤 //Scanner类 表示 简单文本扫描器,在java.util包 //1.引入/导入Scanner类所在的包 //2.创建Scanner对象,new创建一个对象,体会 //myScanner就是Scanner类的对象 Scanner myScanner = new Scanner(System.in);//从键盘输入 //3.接收用户输入了,使用相关的方法 System.out.println("请输入名字"); //当程序执行到next方法时,会等待用户输入~ String name = myScanner.next();//接收用户输入的字符串 System.out.println("请输入年龄"); int age = myScanner.nextInt();//接收用户输入的int System.out.println("请输入薪资"); double sal= myScanner.nextDouble();//接收用户输入的double System.out.println("人的信息如下:"); System.out.println("姓名="+name +"年龄="+age +"薪资="+sal); } }
进制
对于整数,有四种表示方式
- 二进制:0,1,满2进1,以0b或者0B开头
- 十进制:0~9,满十进一
- 八进制:0~7,满八进一
- 十六进制:0~9及A(10)-F(15),满16进1。以0x或者0X开头表示。A~F不分大小写
进制的转换(基本功)
- 二进制转十进制:规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
- 八进制转十进制:规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和(详情看视频:【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_bilibili)
- 十六进制转十进制:规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和
- 十进制转二进制:规则:将该数不断地除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制(详情看视频:【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_bilibili)
- 十进制转十六进制:规则:将该数不断地除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制(详情看视频:【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_bilibili)
- 二进制转八进制:规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可【例子:ob11(3)010(2)101(5)=>0325】
- 二进制转十六进制:规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可【例子:ob1101(D)0101(5)=>oxD5】
- 八进制转换成二进制:规则:将八进制数每一位,转成对应的一个3位的二进制数即可 【例子:0(000)2(010)3(011)7(111)=>0b10011111】
- 十六进制转换成二进制:规则:将十六进制每1位,转成对应的4位的一个二进制数即可【例子:0x2(0010)3(0011)B(1011)=>001000111011】
原码、反码、补码(重点 难点)
- 二进制的最高位是符号位:0表示正数,1表示负数(口诀0->正 1->负)。其余位是低位,称为数值位(原码=最高位+低位)
- 正数的原码,反码,补码都是一样的(三码合一)
- 负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
- 负数的补码=它的反码+1,负数的反码=负数的补码-1
- 0的反码,补码都是0
- java没有无符号数,换言之,java中的数都是有符号的
- 在计算机运算的时候,都是以补码的方式来运算的(补码可以解决正数和负数,把正数和负数统一起来了)
- 当我们看运算结果的时候,要看它的原码
倘若觉得晕乎乎,多看几遍。还是看不懂,那我就直接甩个链接:【计算机组成原理】原码反码补码 | 小白友好_哔哩哔哩_bilibili
看完视频回来再看看8条句子,会知道啥意思的。
位运算
- java中有7个位运算(&、|、^、~、>>、<<、>>>)分别是按位与&、按位或|、按位异或^、按位取反~
- 运算规则
- 按位与& :两位全为1,结果为1,否则为0
- 按位或| :两位有一个为1,结果为1,否则为0
- 按位异或^ :两位一个为0,一个为1,结果为1,否则为0
- 按位取反~ :0->1,1->0
例子:
public class BitOperator{
//编写一个main方法
public static void main(String[] args){
//1.2的补码=> 2的原码 00000000 00000000 00000000 00000010
// 2的补码=> 00000000 00000000 00000000 00000010
//2.3的补码=> 3的原码 00000000 00000000 00000000 00000011
// 3的补码=> 00000000 00000000 00000000 00000011
//3.按位或|
// 00000000 00000000 00000000 00000010
// 00000000 00000000 00000000 00000011
// 00000000 00000000 00000000 00000011 |运算之后的补码
// 00000000 00000000 00000000 00000011 运算之后的原码也是
// 结果就是3
System.out.println(2|3);
//1.2的补码=> 2的原码 00000000 00000000 00000000 00000010
// 2的补码=> 00000000 00000000 00000000 00000010
//2.3的补码=> 3的原码 00000000 00000000 00000000 00000011
// 3的补码=> 00000000 00000000 00000000 00000011
//3.按位异或^
// 00000000 00000000 00000000 00000010
// 00000000 00000000 00000000 00000011
// 00000000 00000000 00000000 00000001 ^运算之后的补码
// 00000000 00000000 00000000 00000001 运算之后的原码也是
// 结果就是1
System.out.println(2^3);
}
}
位运算符【不懂看视频:位运算符_哔哩哔哩_bilibili】
- 还有3个位运算符>>、<<和>>>,运算规则(右除左乘)
- 算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
- 算术左移<<:符号位不变,低位补0
- >>>逻辑右移也叫无符号右移,运算规则是:低位溢出,高位补0
- 特别说明:没有<<<符号
public class BitOperator{
//编写一个main方法
public static void main(String[] args){
int a = 1>>2;
//-1的原码:10000000 00000000 00000000 00000001
//-1的反码:11111111 11111111 11111111 11111110
//-1的补码:11111111 11111111 11111111 11111101
//-1的反码:11111111 11111111 11111111 11111100
//-1的原码:10000000 00000000 00000000 00000011 此处为-4
//算术右移:10000000 00000000 00000000 00000001 11 //人看原码,计算机看补码
//-4/2/2=-1
int b = -1>>2;
int c = 1<<2;
int d = -1<<2;
int e = 3>>>2;
System.out.println("a="+a);//0
System.out.println("b="+b);//-1
System.out.println("c="+c);//4
System.out.println("d="+d);//-4
System.out.println("e="+e);//0
}
}
该文是记录B站韩顺平老师的java课程