Java数据类型详解

Java数据类型详解

整数在计算机中的存储原理

其实任何数据在计算机中都是以二进制表示的。那这里肯定有人问,什么是二进制啊?所谓二进制其实就是一种数据的表示形式,它的特点是逢2进1。

数据的表示形式除了二进制(逢2进1),八进制(逢8进1)、还有十进制(逢10进1)、十六进制(逢10进1)等。

1.二进制中只有0和1两个数
	首先十进制的0和二进制的0是一样的,十进制的1和二进制的1也是 一样的。但是十进制中 有2,但是二进制中就没有2了
2.那么二进制是如何表示十进制的2呢?
	 1
+	 1
——————————
	10 		这里两个1相加,结果为2,由于二进制满2进1,所以最终结果10
3.那么二进制是如何表示十进制的3呢?
	前面我们已经知道二进制10表示十进制的2,那么二进制10+1就表示十进制的3啊!
	10
+ 	 1
—————————
	11 		十进制的3对应的二进制是11
4.那么二进制是如何表示十进制4的呢?
前面我们已经知道二进制11表示十进制的4,那么11+1就表示十进制的5啊
	11
+ 	 1
—————————
	100 	十进制的5对应的二进制是100

前面每算一个二进制数据都是采用+1的方式,逢2进1,一个一个算出来的。有没有更

快的算出十进制对应二进制的方法呢? 这里学习一种方式:叫做除2取余法。

除2取余法
1.怎么做呢?
答:让十进制数据连续除以2,直到商为0,余数反转
2.举例1:把十进制6转换为二进制
		商 余数
6/2		 3	 0
3/2		 1 	 1
1/2 	 0 	 1
然后把余数反转:6对应的二进制是110
3.举例2: 把十进制13转换为二进制
		商 余数
13/2	 6 	1
6/2 	 3 	0
3/2		 1 	1
1/2 	 0  1
然后把余数反转:10对应的二进制是1101
二进制到十进制的转换

这里介绍一种计算方式叫做:8421

为了便于理解,我们先在看一下十进制怎么转十进制,主要是为了让大家看到演化过程。

1.十进制转十进制
	比如我们把12345进行分解:
	12345 = 10000 + 2000 + 300 + 40 + 5
	  	  = 1*10^4 + 2*10^3 + 3*10^2 + 5*10^0
我们发现:
在十进制中如果把十进制的每一位从右往左从0开始编一个号,假设这一位数字
是a, 那么这一位数表示的值就是:a*10^n;
----------------------------------------------------------------------
2.二进制转十进制:
类比十进制:
如果把二进制的每一位从从右往左0开始编一个号用n表示,假设二进制的每一位是a,
那么这一位表示的十进制值是:a*2^n
1)假设二进制的每一位都是1:
128  64   32   16   8    4    2    1 每一位表示的十进制:a * 2 ^ n
7    6    5    4    3    2    1    0 编号:n
1    1    1    1    1    1    1    1 二进制的每一位:a
二进制 	 十进制
11111111 = 1*2^7 + 1*2^6 + 1*2^5 + ... + 1*2^0
		 = 128 + 64 + 32 + ... + 1
		 = 255
2)假设二进制的为0010001
128  64   32   16   8   4   2   1 每一位表示的十进制:a*2^n
7	 6    5    4 	3 	2 	1 	0 编号:n
0 	 0 	  1    0 	0 	0 	0 	1 二进制的每一位:a
二进制 	 十进制
00001101 = 0*2^7 + 0*2^6 + 1*2^5 + ... + 1*2^0
		 = 0 + 0 + 32 + ... + 1
		 = 33
3)8421码:从右往左给二进制的每一位数依次按照1 2 4 8...标记
128  64   32   16   8    4   2   1
0 	 0	  1	   0	0	 0	 0	 1
-----------------------------
只需要将1位上的数字加起来,就是二进制对应的十进制
二进制		 十进制
00001101 = 8+4+1
		 = 13
0000111  = 4+2+1
		 = 7
0001111  = 8+4+2+1
		 = 25

二进制转八进制

前面我们说计算机中数据都是采用二进制来存储的,但是二进制阅读和编写起来都不太方便。为了便于阅读和书写,又推出了八进制、十六进制。

1.运算规则:
	把二进制的每三位一组合,然后对每三位用8421码进行计算,最后拼接到一起
	原因:因为111,的值是7, 再大满7就需要往进位了。
2.把二进制11001110转换为八进制数据
	01 100 001 二进制每三位一组合
	1  4   1   每一组进行8421码运算
	----------
	八进制:141

二进制转十六进制

1.运算规则:
把二进制的每四位一组合,然后对每四位用8421码进行计算,最后拼接到一起
原因:因为1111,的值是15, 再大1满16了就需要往进位了。
2.举例:把二进制11001110转换为十六进制数据
0110 0001 	二进制每四位一组合
6 	 1 		每一组进行8421码运算
----------
十六进制:61
3.练习:把111100转换为十六进制
	0011 1100
	3    12    由于十六进制中有a,b,c,d,e,f分别表示10,11,12,13,14,15
-----------
十六进制:3c

不同进制在Java程序中的书写格式

计算机的最小存储单位

前面我们已经知道计算机表示数据是用二进制来的, 这里我又要抛出一个问题来了! 我现在想要在计算机中存储一个整数6,转换为二进制是110,那么计算机中只是存110吗三位数字吗? 其实不是的,计算机中最小的存储单位是字节(Byte),一个字节占8位(bit),也就是说即使这个数据不足8位也需要用8位来存储。

image-20230806194637212

Java的数据类型整体上来说分为两大类: 基本数据类型、引用数据类型。

基本数据类型

基本数据类型一共有4类8种,每一种数据类型占用的内存空间不一样,能够表示的数据范围也不一样。如下图所示

image-20230806194830182

需要我们注意的是,随便写一个整数或者小数的字面量,它也是有默认数据类型的

- 比如23,它默认就为int类型;如果加上后缀L,则为long类型;
- 比如23.8,它默认为double类型;如果加上后缀F,则为float类型;

下面定义各种类型的变量,将这8种基本数据类型都用一下。

public class TypeDemo1 {
	public static void main(String[] args) {
	// 目标:掌握8种基本数据类型,用来定义变量。
	// 1、整型
		byte number = 98;
		System.out.println(number);
		short number2 = 9000;
		int number3 = 12323232; // 默认
		// 注意:随便写一个整型字面量,默认是int类型的,73642422442424虽然没有超			过long的范围,但是它超过了本身int的范围了。
		// 如果希望随便写一个整型字面量是long类型的,需要在其后面加上L/l
		long number4 = 73642422442424L;
		// 2、浮点型
		// 注意:
		// 随便写一个小数字面量,默认当成double类型对待的,
		// 如果希望这个小数是float类型的,需要在后面加上:F/f
		float score1 = 99.5F;
		double score2 = 99.8; // 默认定义方案。
		// 3、字符型
		char ch1 = 'a';
		char ch2 = '中';
		char ch3 = '国';
		// 4、布尔型
		boolean b1 = true;
		boolean b2 = false;
		// 引用数据类型:String.
		// String代表的是字符串类型,定义的变量可以用来表示字符串。
		String name = "黑马 KFM";
		System.out.println(name);
	}
}

数据类型转换

类型转换的形式总体分为2种,一种是自动类型转换(扩展原始转换),一种是强制类型转换(缩小原始转换)。

下面就是数据类型可以转换的类型:

image-20230806195640306

自动类型转换

  • 什么是自动类型转换?
答:自动类型转换指的是,数据范围小的变量可以直接赋值给数据范围大的变量
byte a = 12;
int b = a; // 这里就发生了自动类型转换(把byte类型转换int类型)
  • 自动类型转换的原理是怎样的?
答:自动类型转换其本质就是在较小数据类型数据前面,补了若干个字节 

image-20230806195904803

除了byte和int之间的转换之外,其他类型也可以转换,转换顺序如下图所示

image-20230806200008722

下面我们通过代码演示一下,自动类型转换的各种形式。

public class TypeConversionDemo1 {
	public static void main(String[] args) {
	// 目标:理解自动类型转换机制。
		byte a = 12; // 8位
		int b = a; // 32位
		System.out.println(a); // 12
		System.out.println(b); // 12
		int c = 100; // 32位
		double d = c; // 64位
		System.out.println(d); // 100
		char ch = 'a'; // 16位
		int i = ch; // 32位
		System.out.println(i); // 97
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值