基本数据类型
Posted yumiaoxa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基本数据类型相关的知识,希望对你有一定的参考价值。
1 package com.yumiaoxia.datatype; 2 /** 3 * 序言:1.java支持的类型分为基本类型和引用类型,基本类型分为boolean(布尔)类型和数值类型 4 * 2.八大数据类型(byte,short,int,long,float,double,char,boolean) 5 * 3.数值的4种表示方式:十进制,二进制(整数以0B或0b开头),八进制(整数以0开)和16进制(整数以0x或0X开头), 6 * 最高位表示符号为,例如1代表负数,0代表正数 7 * 4.数值在计算机内存中以二进制形式存在的,原码是直接将数值换成二进制数, 8 * 正数原码与补码相同,负数的补码是其反码加1,最高符号为不变 9 * 5.有些特殊字符代表特殊的含义,例如占位符,使用时需要转义 10 * 11 * 12 * byte(字节型):占一个字节(8位),表示范围-2^7~2^8,即-127~128 13 * short(短整型):占两个字节(16位),表示范围-2^15~2^16 14 * int(整型):占四个字节(32位),表示范围-2^31~2^32,整数默认类型 15 * long(长整型):占八个字节(64位),表示范围-2^63~2^64 16 * 17 * char(字符型):占两个字节(16位),其变量,值可参加数学运算和比较大小,其实是用该字符的编码参与运算。 18 * 每个字符都有特定的16进制编码,格式“\\uxxxx”表示,计算机底层保存字符的对应编号,范围0~65535, 19 * 20 * 21 * 22 * float与double类型 23 * 1. 范围 24 float(单精度说明符),double(双精度说明符) 25 单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。 26 双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。 27 float和double的范围是由指数的位数来决定的。 28 float的指数位有8位,而double的指数位有11位,分布如下: 29 float: 30 1bit(符号位) 8bits(指数位) 23bits(尾数位) 31 double: 32 1bit(符号位) 11bits(指数位) 52bits(尾数位) 33 于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024, 34 并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数; 35 而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。 36 float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38; 37 double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。 38 2. 精度 39 float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的, 40 其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。 41 float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位, 42 也即float的精度为6~7位有效数字; 43 double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。 44 * 45 *注意点:1.String类型表示字符串,不是基本数据类型,是字符的集合,用双引号括起来,char类型使用单引号 46 * 2.通常情况下,直接给出一个整数值默认int类型,如果将以一个较小的整数值赋给一个byte和short类型, 47 * 系统会自动把这个整数值当成byte和short类型处理,而一个巨大的整数值(超出int范围), 48 * java不会自动把这个整数值当成long类型处理,应该在整数值后增加l或L,推荐L与1区分 49 * 3.java浮点数使用二进制科学记数法表示,因此不可能精确表示一个浮点数,double类型浮点数会更精确一些, 50 * 但仍然不能精确表示,开发者如果需要精确保存一个浮点数,则可以考虑使用BigDecimal类 51 * 4.Java提供三个特殊的浮点数值,正无穷大,负无穷大和非数。用正浮点数除以0得到正无穷大,负浮点数除以0得到负无穷大, 52 * 但用整数值值除以0会抛出ArithmeticException; 53 * 正无穷大通过Double和Float类的POSITIVE_INFINITY表示, 54 * 负无穷大用Double和Float类的NEGATIVE_INFINITY表示,非数通过Double和Float类的NaN表示。 55 * 必须指出正无穷大数值都相等,负无穷大数值都相等,非数不与任何数值甚至本身相等 56 */ 57 58 public class BasicDataType { 59 60 public static void main(String[] args) { 61 int octalValue=013;//八进制数 62 int hexValue1=0x13;//16进制数 63 int hexValue2=0xaf; 64 System.out.println("octalValue:"+octalValue); 65 System.out.println("hexValue1:"+hexValue1); 66 System.out.println("hexValue2:"+hexValue2); 67 68 //定义两个八进制数 69 int binVall = 0b11010100;//位数不足用0补全再保存 70 byte binVall2 = 0B01101001; 71 int binVall3=0B10000000000000000000000000000011;//减一取反得原码1111111111111111111111111111111101 72 System.out.println("binVall1:"+binVall); 73 System.out.println("binVall2:"+binVall2); 74 System.out.println("binVall3:"+binVall3); 75 76 byte binVall4=(byte) 130;//超出范围溢出,计算方法,换成二进制10000010减1取反算出原码11111110=-126 77 byte binVall5=(byte) 0b11101001;//0b11101001本身是int类型,强转成byte类型产生溢出 78 //定义一个64位二进制long型整数 79 long binVall6=0B1000000000000000000000000000000011L;//1不是符号位 80 System.out.println("binVall4:"+binVall4); 81 System.out.println("binVall5:"+binVall5); 82 System.out.println("binVall6:"+binVall6); 83 84 float af = 5.2345556f; 85 //下面值发生改变 86 System.out.println("af:"+af); 87 88 double a=0.0; 89 double c=Double.NEGATIVE_INFINITY; 90 double d=Float.NEGATIVE_INFINITY; 91 System.out.println("负无穷大相等吗?"+(c==d)); 92 93 //0.0除以0.0出现非数 94 System.out.println(a/a); 95 System.out.println("两个非数相等吗?"+(c==a)); 96 97 //所有正无穷大都是相等的 98 System.out.println("所有正无穷大都是相等吗"+(6.0/0==555.0/0)); 99 100 //负数除以0.0得到负无穷大 101 System.out.println(-8/0.0); 102 103 //整数除以0报出异常 104 105 System.out.println(0/0); 106 107 108 } 109 110 }
控制台输出:
octalValue:11
hexValue1:19
hexValue2:175
binVall1:212
binVall2:105
binVall3:-2147483645
binVall4:-126
binVall5:-23
binVall6:8589934595
af:5.2345557
负无穷大相等吗?true
NaN
两个非数相等吗?false
所有正无穷大都是相等吗true
-Infinity
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.yumiaoxia.datatype.BasicDataType.main(BasicDataType.java:105)
以上是关于基本数据类型的主要内容,如果未能解决你的问题,请参考以下文章