基本数据类型
工作中无时无刻不在用着各种中数据类型,可每次总结的时候,还是含糊不清的,不知道是大脑有问题,还是没认真记住。
一、 基本数据类型主要两类
数值型:整数型(byte,short,long,int,),字符型(char),,浮点型(float,double)。
boolean类型:true false
内存大小:1byte = 8bit 范围 (-2)7 到 2 7-1
short = 2byte = 16bit 范围 (-2)15 到 2 15-1
long = 8 byte = 64bit 范围 (-2)63 到 2 63-1
int = 4 byte = 32bit 范围 (-2)31 到 2 31-1
char = 2 byte = 16bit
float = 4 byte = 32bit
double = 8 byte = 64bit
boolean = 1 byte = 8bit
注意:定义一个巨大的整数时,java不会自动将int转化为long,需要在数值后加L。
例如: long value= 999999999999999999999//错误
long value= 999999999999999999999L //正确
二、 整数的表示方法:二进制,八进制,十进制,十六进制
注:八进制以0开头,十六进制一ox或者0X开头
三、 java 7 新增二进制整数。
当定义32为整数时,最高位是符号位。当为1是表示负数,0 表示正数,其中负数以补码的形式存在,因此还需要转换成原码。
四、 十进制 二进制转换方法
十进制转二进制:十进制数依次除以2 取余(1/0)
例:十进制 15
a. 15/2= 7 余 1
b. 7/2 = 3 余 1
c. 3/2 = 1 余 1
所以:十进制 15 = 二进制 1111
二进制转十进制:位值*2n-1+位值*2n-2+位值*20
例:二进制1111转十进制
1*20+1*21+1*22+1*23=15
五、 计算机存储数字的方式
所有数字以二进制的在计算机存在。原码是直接将一个数值换算成二进制数,但计算机以补码的形式保存所有整数。
补码的计算规则:整数的补码=原码,负数的补码 = 反码+1
注:反码 是对原码按位取反,但最高位(符号位)不变。
例:1、int 15
15 的二进制 = 10000000000000000000000000001111
原码: 00000000000000000000000000001111 因为int为32为,当转为二进制不足32位,左边补0。
反码:01111111111111111111111111110000
补码:00000000000000000000000000001111
2、int -15
原码: 10000000000000000000000000001111 因为为负数,所以最高位为1
反码:11111111111111111111111111110000
补码:反码+1 -> 11111111111111111111111111110000+1=11111111111111111111111111110001
六、基本类型转换
1.自动类型转换
定义:系统把某种基本类型的值直接赋给另一种类型的变量
当把一个类型数值范围小的数值或者变量直接赋给另一个表数范围大的变量时,系统将可以进行自动类型转换。
例如:两瓶水,当把小瓶的水倒入大瓶内时,不会出现问题。
char-》int-》-》long-》float-》double
byte-》short-》int-》-》long-》float-》double
例如: int a=8;
byte b = 9;
double = 9.3;
b=a;//错误 a=b;//正确
a = b;//错误 b=a;//正确
2.强制类型转换
强制类型转换和自动类型转换相反,是将表数范围大的类型转成表数范围小的类型,但这样会造成数据溢出,数据丢失。
就像两个瓶,大瓶子盛满水向小瓶子倒入,会溢出。
例如:int 233 转为 byte类型变为 -23
int 233 转为二进制 000000000000000000000000011101001
int(32位) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 |
byte(8位) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 |
byte 类型的只取8位:11101001,这是补码,他的反码= 补码-1=11101000 原码= 10010111 = 十进制-23