java自学之运算符详解

运算符

算术运算符

  1. +、-、*、/、%、++、–
  2. %的本质:a % b = a - a / b * b
  3. 当a为小数时:a % b = a - (int)a/b * b
  4. -10.5 % 3 = -1.5,有小数运算,得到的结果是近似值
  5. 独立使用,i++和++i是一样的
  6. 作为表达式使用:++i先自增后赋值,i++先赋值后自增
//例题一
int i = 1;
i = i++;    //规则使用临时变量:(1)temp=i(右边);(2)i=i+1(右边);(3)i=temp(左边);
System.out.println(i);  //i=1
//例题二
int i = 1;
i = ++i;    //(1)i=i+1;(2)temp=i;(3)i=temp;
System.out.println(i);  //i=2

关系运算符

  1. ==、!=、<、>、instanceof
  2. 关系运算符的结果都是boolean型,要么是true,要么是false
  3. 关系运算符组成的表达式,称为关系表达式
  4. 比较运算符“==”不能误写成“=”

逻辑运算符

  1. 短路与&&、逻辑与&
    • 相同点:两个条件都为true,结果为true
    • 不同点:
    • 短路与&&:如果第一个条件为false,则第二个条件不会判断,效率高
    • 逻辑与&:不管第一个条件是否为false,第二个条件都要判断,效率低
  2. 短路或||、逻辑或|
    • 相同点:两个条件中只要有一个成立,结果为true,否则为false
    • 不同点:
    • 短路或||:如果第一个条件为true,则第二个条件不判断,效率高
    • 逻辑或|:不管第一个条件是否为true,第二个条件都要判断,效率低
  3. 逻辑非!、逻辑异或
    • !操作是取反操作
    • a^b:逻辑异或,当a和b不同时,结果为true,否则为假
//练习题,注意算术运算符和关系运算符的区别
boolean x = true;
boolean y = false;
short z = 46;
if((z++ == 46)&&(y = true))  z++;
if((x = false)||(++z == 49))  z++;
System.out.println("z=" + z);       //z=50

赋值运算符

  1. = ,+= ,-= ,*= ,/= ,%=
  2. a += b;[等价于 a=a+b]
  3. 运算顺序从右向左
  4. 赋值运算符左边只能是变量,右边可以是变量、表达式、常量值
  5. 复合赋值运算符会进行类型转换
    byte b = 3;
    b += 2;      //等价 b = (byte)(b + 2);改成b=b+2将编译不通过
    b ++;        //b = (byte)(b + 1);
    

三元运算符

  1. 语法:条件表达式?表达式1:表达式2;
  2. 如果为true,就返回表达式1结果;如果为false,返回表达式2结果
  3. 表达式1和表达式2要为可以赋给接收变量的类型,或可以自动转换(强制转换)
  4. 三元运算符可以转成if–else语句

运算符优先级

  1. (),{}等
  2. 单目运算符 ++,–(从右向左运算)
  3. 算术运算符
  4. 位移运算符>>,<<
  5. 比较运算符
  6. 逻辑运算符
  7. 三元运算符
  8. 赋值运算符(从右向左运算)

标识符规则和规范

  1. 由26个英文字母大小写,0-9,下划线_或$组成
  2. 数字不可以开头
  3. 不可以使用关键字和保留字,但可以包含关键字和保留字
  4. 严格区分大小写,长度没有限制
  5. 标识符不能包含空格
  6. 规范:
    • 包名:多单词组成时所有字母小写
    • 类名、接口名:多单词组成时,所有单词首字母大写(大驼峰)
    • 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始首字母大写(小驼峰)
    • 常量名:所有字母都大写,多单词之间用下划线连接

键盘输入语句

  1. 用于接收用户输入的数据
  2. 步骤:
    • 导入Scanner类所在包,java.util.*
    • 创建Scanner对象,new创建一个对象
    //键盘输入语句练习
    Scanner myScanner = new Scanner(System.in);
    System.out.println("请输入名字");
    String name = myScanner.next();
    System.out.println("请输入工资");
    int salary = myScanner.nextInt();
    System.out.println("人的信息如下:");
    System.out.println("名字:" + name + "工资:" + salary);
    

进制

  1. 二进制:以0b或0B开头
  2. 八进制:以数字0开头
  3. 十六进制:以0x或0X开头
  4. 二、八、十六进制转十进制:从最低位开始,将每个位上的数提取出来,乘以2、8、16的(位数-1)次方
  5. 十进制转二、八、十六进制:将该数不断除以2、8、16,直到商为0为止,将每步得到的余数倒过来,就是对应的二、八、十六进制(二进制最高位补齐,一个字节八位)
  6. 二进制转八、十六进制:从低位开始,将二进制数每三、四位一组,转成对应的八、十六进制数
  7. 八、十六进制转二进制:将八、十六进制每一位,转成对应的一个三、四位的二进制数即可

位运算

  1. 7个位运算符
  2. 按位与&:两位全为1,结果为1,否则为0
  3. 按位或|:两位中有一个为1,结果为1,否则为0
  4. 按位异或^:两位一个为0,一个为1,结果为1,否则为0
  5. 按位取反~:0->1,1->0
  6. 2&3运算过程:(int型四个字节,三十二位)
    • 先得到2的补码=>2的原码 00000000 00000000 00000000 00000010
    • 3的补码=>3的原码 00000000 00000000 00000000 00000011
    • 按位与
    • 00000000 00000000 00000000 00000010
    • 00000000 00000000 00000000 00000011
    • 00000000 00000000 00000000 00000010 //结果为运算后得到的补码
    • 运算后的原码也是这个(正数三码合一),结果是2
  7. ~-2运算过程:
    • 先得到-2的原码 10000000 00000000 00000000 00000010
    • 得到-2的反码 11111111 11111111 11111111 11111101
    • 得到-2的补码 11111111 11111111 11111111 11111110
    • 按位取反~ 00000000 00000000 00000000 00000001
    • 得到的是运算后的补码,因为为正数,所以原码一样,结果为1
  8. ~2运算过程:
    • 得到2的补码 00000000 00000000 00000000 00000010
    • 按位取反 11111111 11111111 11111111 11111101 补码
    • 补码转换成原码:先-1得到反码,然后符号位不变,其他位取反得到原码
    • 反码:11111111 11111111 11111111 11111100
    • 原码:10000000 00000000 00000000 00000011 结果为-3
  9. 算数右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
  10. 1>>2:本质:1/2/2=0
  11. 算术左移<<:符号位不变,低位补0
  12. 1<<2:本质:122=4

原码、反码、补码

  1. 二进制的最高位是符号位:0表示正数,1表示负数
  2. 正数的原码、反码、补码都一样(三码合一)
  3. 负数的反码=它的原码符号位不变,其他位取反
  4. 负数的补码=它的反码+1,负数的反码=负数的补码-1
  5. 0的反码、补码都是0
  6. java没有无符号位,换言之,java中的数都是有符号的
  7. 在计算机运算的时候,都是以补码的方式运算的,但结果是原码
  8. 当我们看运算结果的时候,要看他的原码(重点)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值