01Java基础语法(常量进制转换原/反/补码变量和数据类型)

Posted ShawnYue-08

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01Java基础语法(常量进制转换原/反/补码变量和数据类型)相关的知识,希望对你有一定的参考价值。

1、常量

2、进制转换

3、原码、反码和补码

4、变量和数据类型

1、常量

常量:在程序执行过程中其值不发生改变。

Java中常量的分类:

  • 字面值常量;
  • 自定义常量;(面向对象讲解,static final)

字面值常量的分类:

  • 字符串常量;(用双引号引起来的内容, "HelloWorld")
  • 整数常量;(所有整数,12,23)
  • 字符常量;(用单引号引起来的内容,‘A‘,‘1‘,‘中‘)
  • 小数常量;(所有小数,3.14)
  • 布尔常量;(只有true和false)
  • 空常量null;(数组部分讲解)

案例演示ConstantDemo.java,用输出语句输出常量。

class ConstantDemo {
    public static void main(String[] args) 	{
	System.out.println("Hello World!");
	//输出字符串常量
	System.out.println(100);
	//输出整数常量
	System.out.println(3.14);
	//输出小数常量
	System.out.println(‘A‘);
	//输出字符常量
	System.out.println(true);
	//输出布尔常量,关键字 true/false
	//System.out.println(null);
	//null空常量不能输出,关键字 null
    }
}

技术图片

在EditPlus记事本写Java保存时用的是utf-8编码,cmd窗口的默认编码为GBK,所以在cmd窗口编译运行时需要指定编码方式,不然会有乱码问题。

javac -encoding utf-8 ConstantDemo.java

如果在EditPlus写Java程序时直接使用ANSI/GBK编码方法,那么用窗口编译运行时,不需要指定编码。

当把输出null空常量的注释放开时,会编译错误。

技术图片

无法确定传入的值是属于字符数组对象还是String对象。

技术图片

一般必须显式指定传入的值所属的对象类别;

指定为Object:

System.out.println((Object)null);
//null

追踪源码:

public void println(Object x) {
    String s = String.valueOf(x);
    synchronized (this) {
        print(s);
        newLine();
    }
}

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

指定为String:

System.out.println((String)null);
//null

追踪源码:

public void println(String x) {
    synchronized (this) {
        print(x);
        newLine();
    }
}

public void print(String s) {
    if (s == null) {
        s = "null";
    }
    write(s);
}

指定为char[]:

System.out.println((char[])null);

追踪源码:

public void println(@NotNull char x[]) {
    synchronized (this) {
        print(x);
        newLine();
    }
}

char[]型参数不可以为null,当指定为char[]类型时,执行会报空指针异常。

2、进制转换

Java针对整型常量提供了四种表现形式:

  • 二进制
  • 八进制
  • 十进制
  • 十六进制

二进制转八进制:从右至左,每三位一组,不够三位的用0补齐;

二进制转十六进制:从右至左,每四位一组,不够四位的用0补齐;

为了区分不同进制的数据,通过加前缀,

  • 二进制:前缀0B 0b
  • 八进制:前缀0
  • 十进制:不用加
  • 十六进制:前缀0X 0x

案例演示:输出不同进制表示的整数

class JinZhi {
    public static void main(String[] args) {
	System.out.println(0b1010);
	//输出二进制数据:10
	System.out.println(0100);
	//输出八进制:64
	System.out.println(12);
	//输出十进制:12
	System.out.println(0x12);
	//输出十六进制:18
    }
}

配置EditPlus实现在记事本内编译运行Java程序。

技术图片

配置了之后,以后保存文件默认编码为ANSI。

进制间的转换:

任意进制到十进制的转换:位权展开法 = 系数 * 基数^权

  • 二进制:2^0 * x + 2^1 * y + ... +
  • 八进制:8^0 * x + 8^1 * y + ... +
  • 十六进制:16^0 * x + 16^1 * y + ... +

十进制到任意进制:除基取余,直到商为零,余数取反。

3、原码、反码和补码

原码:二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小;
反码:在原码的基础上,除符号位外,数值位取反;
补码:在反码的基础上,+1。

A:已知原码求补码
已知某数X的原码为 0B10110100,试求X的补码和反码。

反码:11001011
补码:11001100
检验的方法:原码为-(32+16+4)=-52,然后使用calc计算器查看-52的补码。

B:已知补码求原码
已知某数X的补码 0B11101110,试求其原码。
反码:11101101
原码:10010010
检验的方法:原码为-(16+2)=-18。

4、变量和数据类型

变量:在程序执行的过程中,在某个范围内其值可以发生改变的量;

变量其实是内存中的一小块区域。

变量的定义格式:数据类型 变量名 = 变量值;

Java中数据类型的分类:

  • 基本数据类型
  • 引用数据类型(学到后面讲解,数组、类、接口)

基本数据类型

  1. byte 占用1B 数值范围:[-128, 127]
  2. short 占用2B 数值范围:[-2^15, 2^15 - 1]
  3. int 占用4B 数值范围:[-2^31, 2^31 - 1]
  4. long 占用8B 数值范围:[-2^63, 2^63 - 1]
  5. float 占用4B
  6. double 占用8B
  7. char 占用2B 数据范围:[0, 2^16 - 1]
  8. boolean 占用1B

整数默认是int类型,小数默认是double类型。

案例:定义不同基本数据类型的变量并输出

class VariableDemo {
    public static void main(String[] args) {
        byte number = 127;
        //一个字节的取值范围[-128,127]
        byte number2 = -128;
        short number3 = 1000;
        int number4 = 10000;
        long number5 = 120000L;
        //定义long类型的变量,后面需要加上l或者L,以表示这是一个long类型变量
        float f = 3.14f;
        //定义float类型的变量,后面需要加上f或者F,以表示这是一个float类型变量
        double d = 10.18;
        //浮点数默认为double类型
        boolean bool = true;
        //定义布尔类型,只有两个值,true/false
        boolean bool1 = false;
        char c = ‘a‘;
        //定义字符类型,单引号引起来的单个字符
        char ch = ‘妍‘;

        //根据变量名来输出
        System.out.println("number = " + number);
        System.out.println("number2 = " + number2);
        System.out.println("number3 = " + number3);
        System.out.println("number4 = " + number4);
        System.out.println("number5 = " + number5);
        System.out.println("f = " + f);
        System.out.println("d = " + d);
        System.out.println("bool = " + bool);
	System.out.println("bool1 = " + bool1);
	System.out.println("c = " + c);
	System.out.println("ch = " + ch);
    }
}

使用变量的注意事项:

class VariableDemo2 {
    //定义变量的注意事项:
    public static void main(String[] args) {
    	//1、在同一个作用域内不能定义两个同名变量
	//作用域指一对{}的范围
	int a = 100;
	int b = 200;
 
	int c = 10;
	c = 20;
	//给c重新赋值

	int d,e;
	//2、在方法内部,如果没有给变量赋值,不能使用
	//System.out.println(d);
	d = e = 100;
	System.out.println(d);
    }
}

以上是关于01Java基础语法(常量进制转换原/反/补码变量和数据类型)的主要内容,如果未能解决你的问题,请参考以下文章

2 Java基础语法(keyword,标识符,凝视,常量,进制转换,变量,数据类型,数据类型转换)

Java位运算符

C基础数据类型进制运算符语句

C基础数据类型进制运算符语句

JavaSE:命名规则进制转换原码补码反码数据类型以及转换

_01JavaSE基础_关键字标识符常量进制变量注释数据类型数据类型转换