您的位置:首页 > 编程语言 > Java开发

javaSE部分知识的梳理和复习(一)--进制转换和基本数据类型的回顾

2018-12-16 00:23 776 查看
版权声明:lex https://blog.csdn.net/qq_36258498/article/details/85020067

1.写在前面的话

最近在写代码以及刷题的时候越来越觉得基础的重要性,基础扎实的人在学一些新的技术的时候可以很快就上手并掌握,并且在一些问题的理解上也要更加深入,记忆的也更加牢固,回想我刚接触java到现在se部分的内容也有好多都已经记不清楚了,很多概念也都有些模糊,所以我以博客的形式记录一下我复习se部分知识的过程,通过一些书籍和文章对知识点进行一下串连,也希望通过这种方式更加能加固自己的基础以及身为程序员的内功。

2.进制问题

要想理解java中各种数据类型的转化以及各种类型的大小就要先了解进制的问题

2.1什么是进制

进制是一种进位方法。 对于任何一种进制–X进制,就表示某一位置上的数运算时逢X进一位。二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。

2.2 不同进制在java中的表现形式

二进制在java中是以0b开头的,如ob10,ob后面的数表示的二进制数,打印时候会将其转换为10进制数输出,结果为2

System.out.println(0b10);

八进制在java中是以0开头的 例如010,对应的十进制为8

System.out.println(010);

十六进制在java中是以0x开头的,如0x10,对应十进制的16

System.out.println(0x10);

图解进制间的关系

2.3二进制的简述

在计算机中是只能识别二进制的,每8个二进制位组合成为一个字节,每一个二进制位又被称为一个比特位

2.4进制间的相互转换

转换方法:任意进制到十进制的转换原理系数:就是每一位上的数据。 基数:X进制,基数就是X。 权:在右边,从0开始编号,对应位上的编号即为该位的权。结果:把系数*基数的权次幂相加即可。

2.4.1二进制转十进制

2.4.2八进制转十进制

同2.4.1

2.4.3十六进制转十进制

同2.4.1

2.5原码,补码,反码问题

介绍一下有符号数据表示的几种方法

1.原码

在原码的表示中,第一位表示的是符号位,1位负,0位正,其余7位用来表示数据,其中左边为最高位,右面为最低位例如11111111表示的数是-127。

2.反码

正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外 例如11111111的反码为10000000

3.补码

正数的补码与其原码相同;负数的补码是在其反码的末位加1,例如 11111111的反码为10000000,所以补码在末位加一位10000001

3.java数据类型的介绍

3.1类型介绍

java的数据类型分为基本数据类型和引用数据类型,这里先主要说一下基本数据类型

在java中的数据类型一共分为四类八中其中分别为

整数型:

byte 占一个字节 -2^7 ~ 2^7-1【-128~127】

short 占两个字 -2^15 ~ 2^15-1【-32768~32767】

int 占四个字节 -2^31 ~ 231-1【-231=2147483647】

long 占八个字节 -2^63 ~ 263-1【-263=9223372036854775807】

浮点型:

float 单精度 占四个字节 -3.403E38~3.403E38

double 双精度 占八个字节 -1.798E308~1.798E308

字符型:

char 占两个字节 0~65535

布尔型:boolean java中boolean类型没有明确指定他的大小

3.2 定义数据类型时候注意点

在java中,如果如果我们想要定义一个long或者float的变量的时候应该在后面加上一个l或者f,因为如果直接定义一个整数,java会默认将其当成int类型,如果我们定义的long类型超过了int类型的最大值也就是2147483647的时候就会无法通过编译,所以应该加上L声明这是一个long类型的变量,而在浮点数的定义上,java会默认把所有的浮点数当成double来处理,而double是8个字节的数据,而float是4个字节的数据,无法自动转型为double,所以同样会在编译时报错,同理加上f来声明这是一个float变量即可。

3.3隐式类型的转换

在java的运算中,有一条默认的转换规则,也就是取值范围小的数据和取值范围大的数据进行运算的时候,会将小的数据类型提升为大的数据类型,在进行运算。

例如

public class Test01 {
public static void main(String[] args) {
byte b=2;
int i=3;
i=b+i;
System.out.println(i);
}
}

画图分析转换过程

3.4强制类型转换

所谓强制类型转换就是指,java不能通过隐式转换实现,需要我们自己写代码进行强制转换,也就是将大的数据类型赋值给小的数据类型的时候要进行强制转换

public class Test01 {
public static void main(String[] args) {
byte b=2;
int i=3;
b= (byte) (b+i);
System.out.println(b);
}
}

注意:该种转换存在丢失精度的危险,例如

public class Test01 {
public static void main(String[] args) {
byte b=127;
int i=3;
b= (byte) (b+i);
System.out.println(b);
}
}

该输出结果为-126,为什么为-126?

3.5注意点

进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型byte,short,char与其他类型进行混合运算的是小的数据类型提升为大的

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐