Java的基本数据类型的存储范围

本文详细介绍了Java中的整数类型(byte, short, int, long)的表示范围及运算,强调了浮点型(float, double)的不精确性,并探讨了boolean和char类型。同时,讲解了字符编码,如ASCII、Unicode以及乱码产生的原因。在程序中,展示了不同数据类型的使用示例。
摘要由CSDN通过智能技术生成

1、整数
byte:1个字节,8位二进制来表示数字,最终表示范围:-128~127
    最小的正数:1
        0000 0001
    最大的正数:127
        0111 1111
    最小的负数:-127
    最大的负数:-1
        -1原码  1000 0001
        -1反码  1111 1110
        -1补码  1111 1111
        
        -127原码 1111 1111
        -127反码 1000 0000
        -127补码 1000 0001
    两个零:
    0:0000 0000
    -0:1000 0000  特殊处理(如果继续用它表示0,太浪费了,相当于0有两种形式,多余)
    
        -127补码 1000 0001
        -127-1(基于补码运算) 结果:1000 0000
        -127-1在数学中的结果是-128,用1000 0000来表示-128

byte:1个字节,-128~127
short:2个字节,-32768~32767
int:4个字节,-2的31次~2的31次-1
long:8个字节,-2的63次~2的63次-1
    
    如何选择整数类型?
    如果没有特殊说明,正常都默认选择int类型。
    如果考虑到数值比较小,在byte范围内,可以选择byte,
    如果考虑到数值比较大,怕超过int范围,干脆选择long。

2、小数    
float:4个字节,32位
double:8个字节,64位

通过刚才的过程的了解,我们要得出一些结论?
(1)小数float和double类型都是不精确的,我们称为浮点型
为什么不精确,因为double尾数部分最多也就52位    
                  float尾数部分最多也就23位
当我们把小数换算为二进制后,可能会超过52或23位,会出现截取的情况。
(2)float类型是4个字节,long类型是8个字节,float类型存储范围大,还是long类型存储范围大?
答案:float类型大
为什么?
因为float类型虽然是4个字节,但是它有8位存储指数。8位最多可以表示2的-128~127次

(3)小数的精度范围(十进制小数点后能表示多少位)?
float:小数点后7-8位
double:小数点后15-16位
    基于十进制的科学计数法

3、boolean类型
true:1
false:0    

4、char类型,2个字节,数值范围是0-65535,无符号整数

计算机底层如何表示字符?(了解)
首先,计算机会有一些字符集,把每一个字符用一个整数表示。
(1)最早的字符集是ASCII码,128个字符,编码是0-127。
(2)后来计算机从美国传到了其他的国家,发现128个字符不够用。每个国家开始扩展后面128个字符。
一共256个字符。
后面的128个字符,没有得到统一。
(3)计算机又到了亚洲等国家,发现256个也不够用了。
每个国家又各种设计自己的字符集。
比如:GB2312,Big5...
GB2312是用2个字节表示。

所有的字符集都必须向下兼容ASCII码。
那么GB2312也要兼容ASCII码。就会出现,如果有
10001100 10001010,是用它们表示2个字符还是1个字符呢?

为了解决这样的问题,对编码进行处理。
如果是1个字节就可以搞定的,那么最高位是0。  最多只能表示128个字符了。
如果是2个字节才能搞定,那么最高位是1,两个字节的最高位都是1。

GB2312设计时,没有考虑所有的汉字,后来升级了GBK。
(4)因为各个国家有自己的编码,我们称为ANSI。
出现,如果想要在一个文档中,既表示汉字、韩语、日语,发现ANSI搞不定。
为了解决这个问题,一个新的字符集诞生了,Unicode字符集,又称为万国码。

Unicode字符集遇到一个问题,如何向下兼容ASCII码。
出现了UTF-8,UTF-16等各种处理方式,其中UTF-8是最常用的。
如果1个字节可以搞定,最高位是0
如果需要2个字节,第一个字节开头是110,第二个字节开头是10
如果需要3个字节,第一个字节开头是1110,第二个字节开头是10,第三个字节开头是10
如果需要4个字节,第一个字节开头是11110,第二个字节开头是10,第三个字节开头是10,第三个字节开头是10
称为可变字符编码方式。    

结论:不同的编码方式,会导致同一个“汉字”底层表示不同的,很可能出现乱码。

在程序中如何表示char类型的数据?
(1)'1个字符',例如:'a'或'尚'
(2)Unicode编码值
(3)'\ u十六进制形式的Unicode编码值'
(4)转义字符,只对部分无法用单个字母表示的字符,或者说与Java特殊字符冲突
例如:单引号\'
      双引号\"
      \     \\
      回车 \r
      换行 \n
      Tab  \t
      退格 \b

class TestDataType{
	public static void main(String[] args){
		double d = 125.82547582152857121455455555455;
		System.out.println(d);//125.82547582152857
		
		float f = 125.82547582152857121455455555455F;//小数值后面如果不加F,默认是double
		System.out.println(f);//125.82548
		
		char c = 97;
		System.out.println(c);
		
		char zi = '\u5c1a';//尚
		System.out.println(zi);
		
		char shang = 23578;//尚
		System.out.println(shang);
		
		char dan = '\'';
		System.out.println(dan);
		
		System.out.println("-----------------------------");
		System.out.println("hello\tjava");//输出完hello遇到了Tab,表示从下一个制表位开始输出java
									//控制台默认情况下是8位一个制表位,一个英文字符占1位,一个汉字占2位
									//输出完hello,中间会空3位,到下一个制表位输出java
		System.out.println("hello\rjava");//输出完hello遇到回车,表示结束本行输出,光标回到行首,接着输出java
		System.out.println("hello\njava");//输出完hello遇到换行,表示结束本行手粗,光标移动到下一行行首,接着输出java
		/*
hello   java
javao
hello
java
*/
		System.out.println("-----------------------------");
		System.out.println("hello\tworld\tjava.");
		System.out.println("chailinyan\tis\tbeautiful.");
		System.out.println("姓名\t基本工资\t年龄");
		System.out.println("张三\t10000.0\t23");
/*
hello   world   java.
chailinyan      is      beautiful.
姓名    基本工资        年龄             
张三    10000.0 23
*/
		
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值