Java语言学习笔记03-运算符篇

一、各类运算符

一、算术运算符

对数值类型进行运算,同c语言。但比较特别的部分有:

  1. +:对于字符串而言是字符串拼接。
  2. %:取模。其本质是a % b = a - a / b * b(当a是小数是变为a - (int)a / b * b)。
  3. /:整数相除,不强转的话默认去掉小数位。注意有小数参与的运算得到的结果都是近似值!

以下是两道特殊的面试题,要求回答最后输出i的值是多少?

#(1)
int i = 1;
i = i++;
System.out.println(i);

#(2)
int i = 1;
i = ++i;
System.out.println(i);

第一题的答案是1,第二题的答案是2。

该题的核心在于,进行++和--操作时,计算机内部会自动使用一个临时变量,假设其名称为temp。

对于第一题来说,第二句代码的内部流程为:

int temp = i;
i = i + 1;
i = temp;

也就是所谓后加加的“先用后加”,“先用”指的是用临时变量temp存储i的原始值,“后加”指的是在这之后再执行i=i+1。

而对于第二题来说,第二句代码的内部流程为:

i = i + 1;
int temp = i;
i = temp;

也就是所谓的“先加后用”,因此,两题的答案不相同。

一些朋友可能注意到了++i和i++的区别,却不能理解到临时变量这一层,因此出错。

二、关系运算符(比较运算符)

即结果为boolean类型,经常用于条件判断。

大部分同c语言,比较特殊的是instanceof,用于判断是否是类的对象。

三、逻辑运算符

用于连接多个条件,最终结果也是boolean类型。

特别的,注意短路与逻辑的分类:

  1. 短路与&&,短路或||,取反!:&&若第一个条件为false则直接判断结果为false,不再执行第二个条件;||若第一个条件为true则直接判断结果为true,不再执行第二个条件。
  2. 逻辑与&,逻辑或|,逻辑异或^:与上面的区别是不管第一个条件如何,第二个都会执行判断。其中^的作用是左右不同时为true,否则为false。

四、赋值运算符

=,可以与算术运算符进行复合简化缩写。

如+=,-=等。a+=b即为a = a+b

五、三元运算符

条件表达式? 表达式1:表达式2;

若条件表达式为true,则结果为表达式1,且表达式2不会执行;若条件表达式为false,则结果为表达式2,且表达式1不会执行。

注意:表达式1和2要为可以赋给接受变量的类型(或者可以满足自动转换/强转的)

六、位运算符

1、基本介绍

1、位移运算符

位移运算符:>>   <<   >>>

int a = 1 >> 2;//1向右算术位移2位:
int e = 3 >>>2;//逻辑右移2位

>>算术右移:地位溢出,符号位不变,并用符号位补溢出的高位(相当于除以/2)

<<算术左移:符号位不变,低位补0(相当于乘以*2)

>>>逻辑右移也叫无符号右移:低位溢出,高位补0

注意,没有逻辑左移即<<<

2、位操作运算符(左右都是两个数而不是boolean)
  1. ~按位取反:0变1,1变0

  2. &按位与:两位全1则1,否则0

  3. |按位或:两位有一个1则1,否则0

  4. ^按位异或:两位不同则1,否则0

3、二进制在运算中的说明

对于二进制数在计算机中的存储,有原码、反码、补码三种形式。

对于有符号数而言:

  1. 最高位是符号位,0正1负
  2. 正数原码、反码、补码三码合一
  3. 负数的反码=原码符号位不变,其他位取反
  4. 负数的补码=其反码+1
  5. 0的反码、补码都是0
  6. Java语言中没有无符号数
  7. 计算机运算时都以补码的形式进行运算,方便统一正负数
  8. 但我们看运行结果的时候,要看原码

二、标识符

一、标识符的概念

  1. Java语言中的标识符其实就是“名字”,各种东西的名字,例如变量、方法、类。
  2. 凡是可以自己起名字的地方都叫做标识符

二、标识符命名规则(必须遵守)

  1. 由26个英文字母大小写,数字0-9,_或$组成
  2. 不可以用数字开头
  3. 不可以使用关键字和保留字,但可以包含关键字与保留字
  4. Java严格区分大小写,长度是无限制的
  5. 标识符中不能包含空格。

三、标识符命名规范(建议遵守,显得专业)

  1. 对于包(package)名:由多个单词组成的时候所有字母都小写:aaa.bbb.ccc
  2. 类(class)名、接口(interface)名:由多单词组成时,所有单词的首字母大写:XxxYyyZzz[即大驼峰命名法]
  3. 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz[小驼峰命名法]
  4. 常量名:所有字母都大写,多个单词时每个单词用下划线链接:XXX_YYY_ZZZ
  5. 其他的可以查看文档

四、关键字与保留字

  1. 关键字:是被Java语言赋予了特殊含义,用作专门用途的字符串或单词。其中所有字母都为小写。
  2. 保留字:现有Java版本尚未使用但以后版本可能会作为关键字使用。

三、进制转换

一、基本介绍

对于整数有四种表示方式:

1、二进制:0,1,满2进1,以0b或0B开头。

2、十进制:0-9,满10进1.

3、八进制:0-7,满8进1,以数字0开头表示。

4、十六进制:0-9及A(10)-F(15),满16进1.以0x或0X开头表示。其中A-F不区分大小写。

二、举例

int n1 = 0b1010;//二进制10
int n2 = 1010;//十进制1010
int n3 = 01010;//八进制520
int n4 = 0x10101;//十六进制65793

三、进制之间的转换

1、其他进制转十进制

  1. 二转十:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。

  2. 八转十:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。

  3. 十六转十:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。

2、十进制转其他进制

  1. 十转二:将该数不断除以2,直到商为0为止(即没法整除了),然后将每步得到的余数倒过来,就是对应的二进制。

  2. 十转八:将该数不断除以8,直到商为0为止(即没法整除了),然后将每步得到的余数倒过来,就是对应的二进制。

  3. 十转十六:将该数不断除以16,直到商为0为止(即没法整除了),然后将每步得到的余数倒过来,就是对应的二进制。

3、二进制转八进制、十六进制

  1. 二转八:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。

  2. 二转十六:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。

4、八进制、十六进制转二进制

  1. 八转二:将八进制数的每一位转成对应的一个3位的二进制数即可。

  2. 十六转二:将十六进制数的每一位转成对应的一个4位的二进制数即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值