java数据类型

来源:互联网 发布:淘宝店人气 编辑:程序博客网 时间:2024/06/05 12:15

java数据类型

boolean类型

计算机存储数据经常使用的[双稳态电路][1],通俗点来说就是一种很小的开关组合成的电路,计算机了有很多这样的电路。计算机的各类存储器的最小存储单位叫[位即比特(bit,b)][2],通俗点说就是使用多少个“开关”。“闭合” 和 “打开” 分别表示了数码0 和 数码1(表现形式为数据点,不是数字),是一个二进制单位,而 0 和 1 又可以表示false 和 true (boolean类型),因此boolean类型(布尔类型)的值(布尔值)可以只使用一个“开关”进行表示,所以boolean类型的大小位为 1 。

初始化方式

boolean b = true ;//boolean值(原语)默认初始值为false!

byte类型

计算机跟人类一样,不能无法无天,所以需要规则来约束它,其中一条规定就是规定计算机字节(byte)由8个比特(bit)组成,即byte相当于8个二进制位,同时,规定二进制位的第一位(除布尔值)表示正负值,0表示正数,1表示负数,所以byte的范围为1111 1111 ~ 0111 1111 ,所以很多人认为byte的范围是-(2^6+2^5+2^4+2^3+2^2+2+1)~ 2^6+2^5+2^4+2^3+2^2+2+1 即-(2^7-1)~2^7-1,按照原理是这样的,但是计算机二进制负值的表示有点有趣,并不是和正数一样表示,而是使用反码

比如计算 1-1 = ?1-1 = 1+(-1) 0000 0001 (1)+1000 0001 (-1)--------------- 1000 0010 (-2)

如果按照正负值一样的表示方式来算,1-1的值等于-2不为0,所以就出现问题了,问题出在有负值的数上。所以为了解决负数和正数相加产生的错误,大佬前辈们想出了一种表示负值的方法-反码:对除符号位外的其余各位逐位取反(1取反为0,0取反为1),反码的取值空间和原码相同且一一对应。

反码计算 -1:1000 0001 (原码)           |||| ||||        -1:1111 1110 (反码)所以 1-1 =     0000 0001 (1)    +1111 1110 (-1)---------------     1111 1111 反码计算     1000 0000 (-0) 

计算结果为-0 ,但是0无正负之分,所以-0即为零,0的反码为1111 1111。
所以,byte的最小值为 1111 1111 反码为 1000 0000 即十进制为-2^7;最大值为0111 1111 为 2^7-1。

char 类型

无符号的字符型以ascll码的形式存储在计算机内,一共有256个字符,而计算机将最高位符号也用来计数的话正好足够表示,所以只用使用8比特即1字节,而汉字则用计算机的机内码(一种数字编号)来存储,常用的汉字也就几万字,所以用16位比特(2^16 = 65536 )就足够表示所有汉字了。而16位比特为两字节,所以1个汉字对应就是2字节。java采用unicode,2个字节(16位)来表示一个字符。

初始化方式

char c = 'c' ; //直接使用字符或汉字赋值char c = 二进制、十进制、十六进制 ; //使用对应字符的编码值进行赋值char c = '\数字' ///用字符的编码值来初始化,

short int long 类型

short int long 这三种类型作用都一样,都是用来存储整数数据,二进制计算原理和byte相同。区别在于所能表示的数范围不同:

数据类型 大小位 取值范围 short 16 -2^16 ~ 2^7-1 int 32 -2^31 ~ 2^31-1 long 64 -2^63 ~ 2^63-1

初始化方式

short num = 1 ;//直接进行数值的赋值int num = 1;long num = 1 ;long num = 123456789l;//long超过整数范围时 整数为默认的,超过整数范围需要加上 l 表示长整型

float double 类型

有了整数有了除自然也就会有小数。 [计算机如何存储浮点数?][2](由于篇幅有限不过多深究,有兴趣可看大佬的理解)。
浮点数在机内用指数型式表示,分解为 数符,尾数,指数符,指数四部分。
+ 数符:表示数的正负,占1位
+ 指数符:表示指数的正负,占1位
+ 尾数:表示浮点数有效数字,由计算机系统决定
+ 指数:表示指数的有效数字,由计算机系统决定
而java中的浮点数分为float(单精度) 和 double(双精度)。对编程人员来说,它俩的区别在于double比float精度高,有效位数(double:16位,float:7位)高,进而double所消耗的内存更高,是float的两倍,所以double的运行速度肯定就比float慢多了。编程时在保证了精度的情况下,能使用单精度float是尽量使用float(省内存,速度快)。

[1] http://blog.sina.com.cn/s/blog_614375770102wkkk.html
[2] http://blog.csdn.net/hxz_qlh/article/details/14108123