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

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

2017-09-07 23:24 155 查看
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类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: