java基础(二)

目录

  1. 常量
  2. 进制数
  3. 原码,反码,补码
  4. 数据类型
  5. 运算符

1.常量

class Demo1_Constant {
    public static void main(String[] args) {
        System.out.println("abc"); //字符串常量-用双引号括起来的内容
        System.out.println(123);  //整数常量-所有整数
        System.out.println(12.3); //小数常量-所有小数
        System.out.println('8'); /*字符常量,''中必须放得是单个字符0-9,
        用单引号括起来的内容,里面只能放单个数字,单个字母,单个符号*/
        //System.out.println('');//单引号中什么也不放也是不可以的
        System.out.println(' '); //空格是代表一个空格字符
        System.out.println(true);
        System.out.println(false);   
    }
}

2.进制数

A:二进制的数据表示
由0,1组成。以0b/0B开头
B:八进制
由0-7组成,以0开头
C:十进制
0-9组成,整数默认是十进制的
D:十六进制
由0-9,a-f(大小写均可)。以0x开头
E:案例演示

class Demo1_Scale {
    public static void main(String[] args) {
        System.out.println(0b100); //结果为4
        System.out.println(0100);//64
        System.out.println(100);//100
        System.out.println(0x100);//256
    }
}

十进制转换为任意进制:除积倒取余数
这里写图片描述

3.原码,反码,补码

  • 原码:就是二进制定点表示法,最高位表示符号位,即1代表位负,0代表位正
    例如,通过一个字节,8个二进制位表示+7,-7如下:
    0(符号位) 0000111
    1(符号位) 0000111
  • 反码:正数的反码与原码相同,负数的反码是对原码逐位取反,符号位除外
  • 补码:正数的补码与原码相同,负数的补码是在反码的末位加1。

这里写图片描述

事实上反码是为了求补码的,而所有的运算都是在补码上进行的。

4.数据类型

这里写图片描述

class Demo1_DataType {
    public static void main(String[] args) {
        byte b = 10;
        short s = 20; //两个字节
        int i =30; //占四个字节,整数默认为int
        long x = 40; //占八个字节
        long y = 88888L;
        //超过int的取值范围,long类型后面加L进行long类型标识,最好用L 
        System.out.println(b);
        System.out.println(s);
        System.out.println(i);
        System.out.println(x);
        System.out.println(y);

        //浮点类型:默认是double类型的
        float f = 12.3F; //占四个字符,要用F声明是float类型的
        double d = 22.3; //占八个字符
        System.out.println(f);
        System.out.println(d);


        //字符类型
        char c = 'a'; //占两个字节
        System.out.println(c);

        //布尔类型
        boolean b1 = true;
        boolean b2 = false;
        System.out.println(b1);
        System.out.println(b2);
    }
} 

注:一条语句也是可以定义多个变量的。

int a = 1,b = 3,c = 30;

隐式转换:

class Demo1_DataType {
    public static void main(String[] args) {
        int x = 3;
        byte b = 4;

        x = x + b;
        System.out.println(x);
    }
} 
输出:7

当占字节数低的类型与高的类型做运算时,低的数据类型会转为高的数据类型再运算。如图所示,前面补0。
这里写图片描述

强制转换

class Demo1_DataType {
    public static void main(String[] args) {
        int x = 3;
        byte b = 4;

        b = (byte)(x + b); //x+b为int类型的 而b是byte类型的
        System.out.println(b);
    }
} 

这个过程相当于把前面三个8位去掉。
这里写图片描述

超出范围的强制类型转换

class Demo1_DataType {
    public static void main(String[] args) {

        byte b = (byte)(126 + 4); //x+b为int类型的 而b是byte类型的
        System.out.println(b);
        //输出-126,为什么呢?
        //00000000 00000000 00000000 10000010   130的二进制
        //10000010                              -126的反码
        //00000001                              -1 -求补码
        //10000001                              -126的补码
        //01111110                              -126的原码 
    }
} 

所以这样子会损失精度。

byte a = 3;
byte b = 4;
byte c = a + b;
//这样会出错,因为byte类型运算都会转换为int类型,所以结果是int的类型
//a,b是两个变量,编译的时候不知道具体的值,相加有可能会超出byte的范围
byte a = 7+ 3
//Java编译器有常量优化机制

字符串的输出与字母的运算

class Demo1_DataType {
    public static void main(String[] args) {

        System.out.println('a' + 1); //98 -因为ASCII码表中a表示97
        System.out.println((char)('a' + 1));//b
        System.out.println("hello"+'a' + 1);//helloa1 -任何数据类型用+与字符串连接都会产生新的字符串
        System.out.println("5 + 5 = " + (5+5));//5 + 5 = 10    加括号变换运算的优先级
    }
} 

5.运算符

5.1 基本运算符

class Demo1_DataType {
    public static void main(String[] args) {
        int a = 3;
        int b;

        b = a++;//当++在变量后时,先进行赋值操作,再进行+1操作
        //b = ++a  当++在前面时,先++,再进行赋值
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
} 
输出:
a = 4
b = 3

关于运算的几个小面试题

class Demo1_DataType {
    public static void main(String[] args) {
        int x = 4;
        //       4      6       60
        int y = (x++) + (++x)+ (x*10);
        System.out.println(y); //输出70

        byte b = 10;
        //b++.    相当于b = (byte) (b + 1) 做了强制类型转换
        b = b + 1; //会损失精度
        System.out.println(b);

    }
} 

5.2 逻辑运算符

&—逻辑与:有false则false
|—逻辑或 :有true则true
^—逻辑异或 :相同为false,不同为true
!—逻辑非:取反

class Demo1_Operator {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 30;

        System.out.println(a<b ^ b<c); // true false
        System.out.println(a>b ^ b<c); //false true
        System.out.println(a<b ^ b>c); //true false
        System.out.println(a>b ^ b>c); //false false
    }
}

&&—双“与“:左边是false,右边就不执行了
||—同样具有短路效果

5.3 位运算符

class Demo1_Operator {
    public static void main(String[] args) {
        /*
        * &,|,^,~ 的用法
        * &:有0则0
        * |:有1则1
        * ^:相同则0,不同则1
        * ~:按位取反
        */

        System.out.println(6 & 3);              //2
        System.out.println(6 | 3);              //7
        System.out.println(6 ^ 3);              //5 
        System.out.println(~6);                    //-7?                   
    }
}
/*
    110
&   011
-----------
    010

    110
|   011
-----------
    111

    110
^   011
-----------
    101

    00000000 00000000 00000000 00000110     6的原码反码补码都是本身
    11111111 11111111 11111111 11111001     对6取反
-   00000000 00000000 00000000 00000001
---------------------------------------
    11111111 11111111 11111111 11111000     反码
    10000000 00000000 00000000 00000111     原码(-7)
*/

关于异或的小题:^

class Demo1_Operator {
    public static void main(String[] args) {
        //不定义第三方变量,把a,b的值交换

        int a = 10;
        int b = 20;

        a = a ^ b;    // 10^20
        b = a ^ b;    //10^20^20
        a = a ^ b;   //10^20^10
        System.out.println("a = " + a + ", b = " + b);
        //a = 20, b = 10
    }
}

5.4 三元运算符

关系式为ture ? 输出这个 : 不输出这个

int a = 10;
int b = 20;
int c;
c = (a > b) ? a : b;

这里输出b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值