01Java基础语法(常量进制转换原/反/补码变量和数据类型)
Posted ShawnYue-08
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01Java基础语法(常量进制转换原/反/补码变量和数据类型)相关的知识,希望对你有一定的参考价值。
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中数据类型的分类:
- 基本数据类型
- 引用数据类型(学到后面讲解,数组、类、接口)
基本数据类型
- byte 占用1B 数值范围:[-128, 127]
- short 占用2B 数值范围:[-2^15, 2^15 - 1]
- int 占用4B 数值范围:[-2^31, 2^31 - 1]
- long 占用8B 数值范围:[-2^63, 2^63 - 1]
- float 占用4B
- double 占用8B
- char 占用2B 数据范围:[0, 2^16 - 1]
- 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基础语法(常量进制转换原/反/补码变量和数据类型)的主要内容,如果未能解决你的问题,请参考以下文章