Java基础02_运算

Java基础02_运算_第1张图片

java小笔记持续更新中loading…

文章目录

  • 2.1运算符
      • 2.1.1算术运算符
      • 2.1.2关系运算符
      • 2.1.3逻辑运算符
      • 2.1.4赋值运算符
      • 2.1.5三元运算符
      • 2.1.6运算符优先级
      • 2.1.7标识符
  • 2.2进制
    • 2.2.1进制的转换
    • 2.2.2原码、补码、反码
    • 2.2.3位运算

2.1运算符

算术符一览表:

运算符 运算 栗子 结果
+ 正号 +7 7
- 负号 n=7; -n -7
+ 7+7 14
- 7-7 0
* 7*7 49
/ 7/7 1
% 取模 7%3 1
++i
i++
自增(前):先运算后取值
自增(后):先取值后运算
a=2; b=++a;
a=2; b=a++;
a=2; b=3
a=3; b=2
–i
i–
自减(前):先运算后取值
自减(后):先取值后运算
a=2; b=–a;
a=2; b=a–;
a=1; b=1
a=1; b=2
+ 字符串相加 “xiao”+“ye” xiaoye

2.1.1算术运算符

  • / 的使用
//与C中用法一样,int/int=int
double n1 = 10/4d;	//2.5
double n2 = 10.0/4;	//2.5
double n3 = 10/4;	//2.0

  • %的使用
//a%b=a-((int)a)/b*b 有小数运算结果是近似值
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++的使用
public class xiaoye{
    public static void main(String[] args){
        /*
        作为表达式使用
        ++i:先自增后赋值
        i++:先赋值后自增
         */
        int i = 2;
        int j = ++i;    //i=i+1;j=i
        int k = j++;    //k=j;j=j+1

        System.out.println("j="+j+'\t'+"k="+k);
    }
}

j=4	k=3
  • 其余的运算符就比较正常了

2.1.2关系运算符

public class xiaoye{
    public static void main(String[] args){
        int num1 = 9;
        int num2 = 2;
        System.out.println(num1<num2);
        System.out.println(num1<=num2);
        System.out.println(num1>num2);
        System.out.println(num1>=num2);
        System.out.println(num1==num2);
        System.out.println(num1!=num2);
        boolean flag = num1<num2;
        System.out.println(flag);
    }
}

false
false
true
true
false
true
false
  • 注意
  1. 关系运算符 == 不能写成赋值符号 =
  2. 关系运算符的结果都是boolean型

2.1.3逻辑运算符

  • 短路与 &&,短路或 ||,取反 !
  • 逻辑与 &,逻辑或 |,异或 ^
  1. a&b:当a和b同时为真时,结果为真,否则为假
  2. a&&b:规则同上
  3. a|b:当a和b中有一个为真时,结果为真,否则假
  4. a||b:规则同上
  5. !a:当a为真,结果为假;当a为假,结果为真
  6. a^b:当a和b不同时,结果为真,否则为假

  • && 与 & 的使用区别
  1. 短路与 ‘&&’ :如果第一个条件结果为false,则第二个条件不会判断,最终结果为false,效率高
  2. 逻辑与 ‘&’:不管第一个条件的判断结果是真是假,第二个条件都要判断,效率低
  3. 开发中基本使用短路与 ‘&&’ ,效率高
public class xiaoye{
    public static void main(String[] args){
        /*
        逻辑与& 短路与&&
         */
        int num1 = 7;
        int num2 = 1;
        if(num2<5 && ++num1<20){
            System.out.println("小椰1");
        }
        System.out.println("num2="+num2);
        if(num1<5 & ++num2<20){
            System.out.println("小椰2");
        }
        System.out.println("num2‘="+num2);
    }
}

小椰1
num2=1
num2‘=2

  • || 和 | 的使用区别
  1. 短路或 || :如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
  2. 逻辑或 | :不管第一个条件的判断结果是真是假,第二个条件都要判断 ,效率低
  3. 开发中基本使用短路或 | ,效率高

2.1.4赋值运算符

=:把等号右边赋值给左边

2.1.5三元运算符

  • 条件表达式 ? 表达式1 : 表达式2 ;
  1. 如果条件表达式为 true ,运算后的结果为表达式1;
  2. 如果条件表达式为 false ,运算后的结果为表达式2;
public class xiaoye{
    public static void main(String[] args){
        int num1 = 7;
        int num2 = 1;
        
        int res = num2>num1?num1++:num2--;
        System.out.println(res);
        System.out.println("num2="+num2);
        System.out.println("num1="+num1);
    }
}

1
    num2=0
num1=7
  • 使用细节
  1. 表达式1和表达式2要为可以赋值给接收变量的类型(或可以自动转换)。
  2. 三元运算可以换成 if–else 语句。

2.1.6运算符优先级

  1. 运算符有不同的优先级,即运算顺序。
  2. 只有单目运算符,赋值运算符从右向左运算。
  3. 一般表达式中会用小括号指定优先级。

2.1.7标识符

  • 标识符概念
  1. Java对各种变量、方法和类等命名时使用的字符序列叫做标识符。
  2. 凡是自己可以起名字的地方都叫标识符 int num = 1;
  • 标识符命名规则(必须遵守)
  1. 字母、数字、_或$组成。
  2. 数字不能开头。
  3. 不可以使用关键字和保留字,但是能包含关键字和保留字。
  4. Java中区分大小写,长度没限制。
  5. 标识符不能包含空格。
  • 标识符命名规范
  1. 包名:多单词组成时所有字母都小写。
  2. 类名、接口名:多单词组成时,所有单次首字母大写。
  3. 变量名、方法名:第一个单词首字母小写,第二个单词开始每个单词首字母大写。
  4. 常量名:所有字母都大写。

2.2进制

  • 对于整数,有四种表示方式
  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不区分大小写,

2.2.1进制的转换

  • 其他转10

n ∗ m p − 1 n*m^{p-1} nmp1

  • 10转其他

将该数不断除以 n ,直到商为0,将每步得到的余数倒过来。不够字节的位补零。

  • 2转8、16
  1. 将二进制每三位一组,转成对应的八进制数。
  2. 将二进制每四位一组,转成对应的十六进制数。
  • 8、16转2(上面的逆变换)
  1. 将八进制的每一位,转成对应的一个3位的二进制数。
  2. 将十六进制的每一位,转成对应的一个4位的二进制数。
public class xiaoye{
    public static void main(String[] args){
        int n = 34;
        System.out.println(n+"的二进制是"+Integer.toBinaryString(n));
        System.out.println(n+"的八进制是"+Integer.toOctalString(n));
        System.out.println(n+"的十六进制是"+Integer.toHexString(n));
        System.out.println(n+"的三进制是"+Integer.toString(n,3));
    }
}

34的二进制是100010
34的八进制是42
34的十六进制是22
34的三进制是1021

2.2.2原码、补码、反码

  • 小记
  1. 二进制的最高位是符号位:0表示正数,1表示负数。
  2. 正数的原码、补码、反码都一样(正数三码合一)。
  3. 负数的反码:原码符号位不变,其他位取反。
  4. 负数的补码:它的反码+1。
  5. 0的反码、补码都是0。
  6. Java中没有无符号数,即Java中的数都是有符号的,
  7. 在计算机运算的时候,都是以补码的方式运算的。
  8. 当我们看运算结果的时候,要看他的原码。

2.2.3位运算

Java中有7个位运算:

  1. 按位与 &:两个都为1,结果为1;否则为0。
  2. 按位或 |:两个都为0,结果为0;否则为1。
  3. 异或^:两个不同时,结果为1;否则为0。
  4. 取反 ~:0变1,1变0。
  5. 算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位。n/2/2
  6. 算术左移<<:符号位不变,低位补0。n22
  7. 逻辑右移 >>>:也叫无符号右移,低位溢出,高位补0。
  8. 没有 <<<
public class xiaoye{
    public static void main(String[] args){
        //位运算
        int n1 = -2&3;
        /*
        -2的原码:10000000 00000000 000000000 00000010
        -2的反码:11111111 11111111 111111111 11111101
        -2的补码:11111111 11111111 111111111 11111110
        3的补码: 00000000 00000000 000000000 00000011
        位运算:  00000000 00000000 000000000 00000010
        结果原码:00000000 00000000 000000000 00000010 -> 2
         */
        int n2 = ~2;
        /*
        2的原码: 00000000 00000000 00000000 00000010
        取反:    11111111 11111111 11111111 11111101
        补码减1: 11111111 11111111 11111111 11111100
        原码:   10000000 00000000 00000000 00000011 -> -3
         */
        System.out.println("n1="+n1);
        System.out.println("n2="+n2);
    }
}

n1=2
n2=-3

‍‍‍接着肝!趁机拉波小关注,嘻~

Java基础02_运算_第2张图片

你可能感兴趣的:(Java,java,开发语言)