Java基础(一)基本数据类型

来源:互联网 发布:开淘宝网店的流程2016 编辑:程序博客网 时间:2024/05/16 08:00
8种基本数据类型(以下根据使用频率):
a、int 整型 4字节 21亿4千万
b、double 双精度浮点数 8字节
c、float 单精度浮点数 4字节
d、char 字符 2字节 65535
e、long 长整型 8字节
f、 byte 比特 1字节
g、boolean 布尔型 1字节
h、short 短整型 2字节 32767

整数类型
换算:8个能存储0或1空间=1字节=1B,1024B=1KB,1024KB=1MB,1024MB=1GB
a、一个int定义的整数空间,占用4个字节,每个字节8位二进制数,故int定义的整数空间是32位
b、由于在机器当中,没有表示负数的方法,故将二进制数最高位作为符号位,其余的位用于表示数据。
c、而在机器码中,0表示正数,1表示负数。由于int表示的整数空间为32位,扣除第一位作为符号位,实际上能表示的数据范围是-2^31与+2^31
d、由于有一个正0:000000000000000000000000000000与一个负0:100000000000000000000000000000000,将负0定义为-2147483648
e、因此int所能表示的数据范围是-2^31~2^31-1,即-2147483648~+2147483647,(21亿4千万
f、从0到2147483647共2^31个数据,从-1到-2147483648也是2^31个数据。

g、例如,010111,表示一个正数,大小为2^4+2^2+2^1+2^0=16+4+2+1=23
110101,表示一个负数,即蓝色的部分是符号位,大小为-(2^4+2^2+2^0)=-21
h、long定义的数据空间,占用8个字节,每个字节8位二进制书,故long定义的整数空间是64位
long所能表示的数据范围为-2^63~+2^63-1,即-9223372036854775808~9223372036854775807。
i、short只能保持32767以内

整数直接量(默认定义的数据类型:int)
a、Java中任意一个整数,默认被定义为int类型
b、int类型又有范围,即不能超过21亿4千万
c、如果写了一个整数直接量,超过了int类型,那么就必须采用long类型,对整数直接量进行定义
定义方法是在整数直接量后加上小写的L,比如100 0000 0000,之后,要加上小写的L,即100 0000 0000l。
e、即long a=100 0000 0000l;编译正确
而long a=100 0000 0000;编译错误
f、直接量的概念:所谓的直接量实际上就是已经定义好的数据。比如:int直接量:30----double直接量:50.5

浮点数直接量(默认定义的数据类型:double)
a、java中任意一个小数,默认被定义为double类型。
b、比如3.14是double类型。
c、在使用float对变量进行定义时,小数直接量无法直接赋值给float定义的变量,因为系统默认的小数直接量是double类型
所以需要在小数直接量后面加上f,才可以赋值给float定义的变量。
float f1=3.14;编译错误
float f1=3.14f;编译正确
d、double类型比float类型的精确更高,因为double是64位,float是32位
即float只有单精度,但是double有双精度。
扩展阅读
为什么浮点数,计算机无法精确表示?因为计算机的科学计数法是二进制数。浮点数遵循的是IEEE754 表示法。
对于二进制小数,小数点右边能表达的值是 1/2, 1/4, 1/8, 1/16, 1/32, 1/64, 1/128 ... 1/(2^n)
现在问题来了, 计算机只能用这些个1/(2^n) 之和来表达十进制的小数。
我们来试一试如何表达十进制的 0.2 吧。
0.01 = 1/4 = 0.25 ,太大
0.001 =1/8 = 0.125 , 又太小
0.0011 = 1/8 + 1/16 = 0.1875 , 逼近0.2了
0.00111 = 1/8 + 1/16 + 1/32 = 0.21875 , 又大了
0.001101 = 1/8+ 1/16 + 1/64 = 0.203125 还是大
0.0011001 = 1/8 + 1/16 + 1/128 =0.1953125 这结果不错
0.00110011 = 1/8+1/16+1/128+1/256 = 0.19921875
已经很逼近了, 就这样吧。

关于char类型(字符类型),采用的是Unicode编码
a、在使用char对变量进行定义时,由于char定义的是字符,所以不论赋值的数据是字母,还是小于65535的数据
或者是Unicode编码,最后变量得到的实际上是Unicode编码,而打印出来的变量实际上是Unicode编码对应的字符。
b、在赋值过程中,如果赋值的是字符以及Unicode编码,都需要加单引号,如 ‘a’ 或 '\u0041'
如果赋值的是数字,那么可以不用加单引号。

扩展阅读
为什么char采用的是Unicode编码
a、计算机不认识字符,只认识数字,将数字与字符一一对应,每个字符在计算机仅有一个数字与之对应。
b、使用时,必须使用单引号包裹。而char类型的字符,在计算机中,仅有65535个字。
c、故对char进行赋值时,除了可以用单引号+字符,也可以用数值,但数值只能在0~65535之间,也可以用Unicode字符的16进制表示法。
d、常用的Unicode编码:0~9的Unicode数值为48~57;
A~Z的Unicode数值为65~90;
a~z的Unicode数值为97~120;
e、同一个字母大小写字母之间的Unicode数值都相差32。比如A与a
f、char c1=‘A'; 等价于 char c1=65;等价于char c3='u0041';

小结:对java而言,任意一个整数比如64,都会被定义为int类型。任意一个小数,比如12.3都会被定义为double类型。




原创粉丝点击