JAVA学习笔记(三):运算符、标识符、键盘输入(Scanner)、进制、原码反码补码

算术运算符

符号名称例子结果
%取模11%51
/6/23

除法(/)


System.out.println(10 / 4);

//输出2,因为10和4都是int型数据,结果为int型

System.out.println(10.0 / 4);  

//输出2.5,因为10.0是double型,故结果为double型

double d = 10 / 4;

System.out.println(d);  

//输出2.0,因为10/4计算得int型结果2,然后将2转换为double型得2.0

取模(%)

a % b

当a是负数时。底层的运算为:a - (int)(a/b) * b


   -10.5%3 => -10.5-(-10)/3*3

            = -10.5 - (-3)*3

            = -1.5

PS: 有小数参与运算时,得到的是近似值

输出结果:

  1. 练习
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
printf("%d",i);  //i=2
return 0;
//定义一个变量保存华氏温度,华氏温度转换为摄氏温度的公式为:5/9*(华氏温度-100)
//算出华氏温度对应的摄氏温度
double a = 234.5;
double b = 5.0 / 9 * (a - 100);
//double b = 5 * (a-100) / 9;
//注意是5.0不是5 因为int型的精度比较低,导致最后的结果为零
System.out.println("对应的温度为" + b);

关系运算符

运算符运算例子结果
instanceof检查是否是类的对象“Ihh” instanceof Stringtrue

&& 和 & 使用区别(||和|)

  • &&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false。

  • &逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低。

    在开发当中,一般都是用短路与&&,效率高。

    同样,一般用短路或||。

逻辑非(!)和逻辑异或(^)

       boolean x = true;
       boolean y = false;
       short z = 46;
       if((z++ == 46) && (y = true)) z++;  //注意 y = true 是赋值,为true ,z = 48
       if((x = false)||(++z == 49)) z++;  //注意 x = false 是赋值,为true ,z =50
       System.out.println("z=" + z);  //结果z= 50

       boolean m = x ^ y; //false 异或 true = true
       System.out.println(m);

赋值运算符

byte b = 3;
b += 2;             //正确,等价于b = (byte)(b + 2);
b = b + 2;          //错误,右边结果是int型
b++;                //等价于b = (byte)(b + 1);

三元运算符

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

  • 求三个数的最大值
int a = 10;
int b = 20;
int c = 30;

//方法一
int temp = a > b ? a : b;
int lagest = temp > c ? temp : c;
System.out.println("a,b,c当中最数的是" + lagest);

//方法二
int lagest = (a > b ? a : b) > c ? (a > b ? a : b) : c;
System.out.println("a,b,c当中最数的是" + lagest);

运算符优先级

(1)() {}等

(2)单目运算符 + + - -

(3)算术运算符 + - * / %

(4)位移运算符 >> <<

(5)比较运算符 < > <= == !=

(6)逻辑运算符 && ||

(7)三元运算符 ? :

(8)赋值运算符 =

标识符命名规范

(1)包名:多单词组成时所有字母都小写:aaa.bbb.ccc

(2)类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz[大驼峰]

(3)变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz[小驼峰,简称 驼峰法]

(4)常量名:所有字母都大写。多单词时,每个单词都用下划线链接:XXX_YYY_ZZZ

键盘输入(Scanner)

(1)导入该类的所在包,java.util.*(*在此为Scanner)。


    import java.util.Scanner

    //表示把java.util包里的Scanner类导入进来

(2)创建该类对象实例(声明变量)。


    Scanner myScanner = new Scanner(System.in);

    //创建Scanner对象,名字为myScanner,new 创建一个对象

    //myScanner就是Scanner类的对象

(3)调用里面的方法。接收用户的输入。


    Scanner myScanner = new Scanner(System.in);

    //用户输入

    System.out.println("请输入名字:");

    String name = myScanner.next(); //接收用户输入的字符串

    System.out.println("请输入年龄:");

    int age = myScanner.nextInt(); //接收用户输入的整型数据

    System.out.println("请输入工资:");

    double salary = myScanner.nextDouble(); //接收用户输入的浮点数

    System.out.println("name:" + name + "age:" + age + "salary:" + salary);

进制表示

  1. 二进制:0,1,以0b或0B开头

  2. 十进制:0-9。

  3. 八进制:0-7,以数字0开头表示

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

进制转换

m进制 -> 十进制

规则:从最低位(右边)开始,每一位的数提取出来,乘以m的(位数-1)次方。然后求和。


0b1101 = 1*2^0 + 1*2^2 + 1*2^3

0234 = 4*8^0 + 3*8^1 +2*8^2

0x23A = 10*16^0 + 3*16^1 + 2*16^2

十进制 -> m进制

规则:将该数不断除以m,直到商为0,然后将每步得到的余数倒过来,就是对应的二进制。

在这里插入图片描述


34 = 0B00100010(前面有两个0是因为要至少凑一个字节)

237 = 0xED

二进制 -> 八进制

规则:从低位开始,将二进制数每三位一组,转成对应的八进制

其余进制:先转换为二进制,再转换为八进制

八进制 -> 二进制

规则:每个八进制位转为三位二进制数

二进制 -> 十六进制

规则:从低位开始,将二进制数每四位为一组,转成对应的十六进制

其余进制:先转为二进制,再转为十六进制

十六进制 -> 二进制

规则:每个八进制位转为四位二进制数


位运算

java当中有7个位运算(&、|、^、~、>>、<<和>>>)

分别是按位与&、按位或|、按位异或^、按位取反~,算术右移>>,算术左移<<,逻辑右移(无符号右移)>>>,它们的运算规则:

按位:每一位都要进行对应运算

(1)按位异或^:不同为1,相同为0

(2)按位取反~:0变1,1变0

(3)算术右移>>:低位溢出,符号位不变,并用符号位补溢出的(缺失的)高位

- 右移多少位,即除以多少个2

(4)算术左移<<:符号位不变,低位补0

- 左移多少位,即乘以多少个2

(5)逻辑右移(无符号右移)>>>:低位溢出,高位补0(注意:没有<<<符号)


原码、反码、补码

1) 二进制的最高位十符号位:0表示正数,1表示负数。

2) 正数的原码、反码,补码都一样。

3) 负数的反码 = 它的原码符号位不变,其它位取反。

4) 负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1。

5) 负数的补码 = 原码右数第一个1,其左边(除符号位)全部取反,右边不变。

6) 0的反码,补码都是0。

7) java没有无符号数,换言之,java中的数都是有符号的。

8) 在计算机运算的时候,都是以补码的方式来运算的。

9) 当我们看运算结果时候,要看他的原码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值