Java基础类型与其二进制表示
Java中的基础类型有:byte、short、int、long、float、double、char和boolean。
它们可被分为四种类型,整型、浮点型、char型和boolean型。
整型:byte、short、int、long 分别占用1、2、4、8个字节的空间;
浮点型:long、float 分别占用4、8个字节;
char型:char 占用2个字节;
boolean型:boolean 占用1位。
在Java中不能直接使用二进制表示数字,可以使用8进制或者16进制来间接表示。这些数字类型在计算机中是如何表示的哪?通过下面的代码大家可以看个大概,具体为什么会这样大家可以看看我博客上“计算机中如何表示数字”的那几篇文章,其实这段代码主要是为了配合那几篇文章而来的。
至于char型在后面要单独介绍,因为Java中的char型是很独特的,它会占用两个字节的空间。boolean就用不着介绍了,但要记住和c不同,Java中的boolean型和整数没有关系,它们之间无法进行转换。
public class PrimitiveType {
public static void main(String[] args){
//java中整型数计算采用补码,可以通过十六进制或者八进制形式对整型数直接赋值,java中不能
//直接使用二进制数
//byte
byte maxByte=0x7f;
System.out.println("最大byte:0x7f 真值:"+maxByte);
byte minByte=(byte) 0x80;
System.out.println("最小byte:0x80 真值:"+minByte);
//short
short maxShort=0x7fff;
System.out.println("最大short:0x7fff 真值:"+maxShort);
short minShort=(short) 0x8000;
System.out.println("最小short:0x8000 真值:"+minShort);
//int
int maxInt=0x7fffffff;
System.out.println("最大int:0x7fffffff 真值:"+maxInt);
int minInt=0x80000000;
System.out.println("最小int:0x80000000 真值:"+minInt);
//long
System.out.println("最大long:0x7fffffffffffffff 真值:"+
Long.decode("0x7fffffffffffffff"));
System.out.println("最小long:0x8000000000000000 真值:"+
Long.decode("-0x8000000000000000"));
//算是一个bug吧,补码表示已经是带符号的数字了
//java中对小数直接量默认为double类型,定义float型需要在小数后面加上字母F,大小写不限
float f=0.1F;
double d=0.1D;//定义double,在小数后面也可以加D,大小写不限
//---------------------Java中浮点数计算都遵循IEEE754规范-------------------------//
//与整型数不同,浮点数在java中无法直接通过十六进制或者八进制形式定义
//最大正数(0 11111110 11111111111111111111111)=(0x7f7fffff)
float maxPositiveNumber=Float.intBitsToFloat(0x7f7fffff);
System.out.println("最大正单精度浮点数:0x7f7fffff 真值:"+maxPositiveNumber);
//最小正数(0 00000001 00000000000000000000000)=(0x00800000)
float minPositiveNumber=Float.intBitsToFloat(0x00800000);
System.out.println("最小正单精度浮点数:0x00800000 真值:"+minPositiveNumber);
//0,IEEE754 规定 E=0 M=0,则值为0,(0 00000000 00000000000000000000000)=(0x00000000)
float positoveZero=Float.intBitsToFloat(0x00000000);
System.out.println("正零:"+positoveZero);
float negativeZero=Float.intBitsToFloat(0x80000000);
System.out.println("负零:"+negativeZero);
//最大负数(1 00000001 00000000000000000000000)=(0x80800000)
float maxNegativeNumber=Float.intBitsToFloat(0x80800000);
System.out.println("最大负单精度浮点数:0x80800000 真值:"+maxNegativeNumber);
//最小负数(1 11111110 11111111111111111111111)=(0xff7fffff)
float minNegativeNumber=Float.intBitsToFloat(0xff7fffff);
System.out.println("最小负单精度浮点数:0xff7fffff 真值:"+minNegativeNumber);
//NaN,非数值,JDK API doc 上面也有提到
System.out.println("NaN:E=255 M<>0 例如:0x3f800001 运行结果:"+
Float.intBitsToFloat(0x7f800001));
//POSITIVE_INFINITY,正无穷大
System.out.println("POSITIVE_INFINITY:S=0 E=255 M=0 0x7f800000 运行结果:"+
Float.intBitsToFloat(0x7f800000));
//NEGATIVE_INFINITY,负无穷大
System.out.println("NEGATIVE_INFINITY:S=0 E=255 M=0 0xff800000 运行结果:"+
Float.intBitsToFloat(0xff800000));
//双精度浮点数同理可得
//下面对char型进行讨论
char[] codeUnits;
//基本多语言级别 basic multilingual plane
//ASC2 code
for(int i = 0 ; i < 128 ;i++){
codeUnits = Character.toChars(i);
if( codeUnits.length == 1 ){
System.out.println(i+" "+(char)i);
}
}
//汉字 '严'
char yan = '\u4e25';
codeUnits = Character.toChars(0x4e25);
System.out.printf("汉字:"+yan+" 代码点所占代码单元长度"+codeUnits.length+
" (0x%x) ,它属于基本多语言级别。\n",(int)codeUnits[0]);
//辅助字符 supplementary character
//代码点0x1d56b
codeUnits = Character.toChars(0x1d56b);
//判断代码单元的高低位
System.out.printf("代码点0x%x 在UTF-16表示中被分解为两个代码单元 0x%x 0x%x \n",
0x105600,(int)codeUnits[0],(int)codeUnits[1]);
System.out.printf("0x%x is HighSurrogate:"+Character.isHighSurrogate(codeUnits[0])+
"\n",(int)codeUnits[0]);
System.out.printf("0x%x is HighSurrogate:"+Character.isHighSurrogate(codeUnits[1])+
"\n",(int)codeUnits[1]);
System.out.printf("0x%x is LowSurrogate:"+Character.isLowSurrogate(codeUnits[0])+"\n",
(int)codeUnits[0]);
System.out.printf("0x%x is LowSurrogate:"+Character.isLowSurrogate(codeUnits[1])+"\n",
(int)codeUnits[1]);
}
}
Java基础类型与其二进制表示的更多相关文章
- java基础类型的byte为长度
java基础类型的字节长度: 类型 byte数/位数 最大/最小值 byte 1/8 127/-128 short 2/16 32767/-32768 int 4/32 2147483647/-214 ...
- Java基础类型总结
最近一直在总结反思自己, 趁着现在请假在学校上课的空余时间,从基础开始重新温故学习下Java,充实下自己. 一.数据类型 从下图中,我们可以很清晰的看出Java中的类型,其中红色方框中的是Java的4 ...
- Java基础类型自动装箱(autoboxing)
Java SE 1.5 版本及之后,开始提供自动装箱功能. 自动装箱,将基础类型“包装”成一种类型: 基本类型 --> 包装器类 如下过程可触发自动装箱过程: Integer count = ...
- java基础类型中的char和byte的辨析及Unicode编码和UTF-8的区别
在平常工作中使用到char和byte的场景不多,但是如果项目中使用到IO流操作时,则必定会涉及到这两个类型,下面让我们一起来回顾一下这两个类型吧. char和byte的对比 byte byte 字节, ...
- java基础类型数据与String类包装类之间的转换与理解
数据类型转换一般分为三种: 在java中整型,实型,字符型视为简单数据类型,这些数据类型由低到高分别为:(byte,short,char--int-long-float-double) 简单数据类型之 ...
- java基础类型源码解析之String
差点忘了最常用的String类型,我们对String的大多数方法都已经很熟了,这里就挑几个平时不会直接接触的点来解析一下. 先来看看它的成员变量 public final class String { ...
- Java 基础类型
在Java中,基本的数据类型主要有8种: 1)int 4 字节(byte) -2的31次方到2的31次方-1 2)short 2 字节(byte) -2的15次方到2的15次方-1 3)long ...
- Java 基础类型 默认值
(1)数据库里的列,如果有默认值,不能赋值有业务含义的值. (2)int 默认值 java会分配默认值的额.
- java基础类型源码解析之HashMap
终于来到比较复杂的HashMap,由于内部的变量,内部类,方法都比较多,没法像ArrayList那样直接平铺开来说,因此准备从几个具体的角度来切入. 桶结构 HashMap的每个存储位置,又叫做一个桶 ...
随机推荐
- js基础之动画(二)
一.多物体同时运动 栗子一:多个Div,鼠标移入变高,动态下拉菜单 function startMove(obj,iTarget){ clearInterval(obj.timer); obj.ti ...
- Memcached 及 Redis 架构分析和比较
Memcached和Redis作为两种Inmemory的key-value数据库,在设计和思想方面有着很多共通的地方,功能和应用方面在很多场合下(作为分布式缓存服务器使用等) 也很相似,在这里把两者放 ...
- WDCP管理面板安装启动EXIF、bcmath完整步骤
一般我们网站建设的需要,如果使用WDCP面板默认的功能就足够使用,如果需要特殊程序的特定组件支持,就需要独立的安装支持组件.比如一位朋友的程序需要支持EXIF.bcmath组件,这不老蒋寻找解决方法, ...
- struts2的返回类型
return 一个字符串,如果是success 直接 服务器端跳转 返回到和方法名对应的页面去 不过如果返回的页面和方法没有太大关系,比如删除修改添加之后要 客户端跳转 返回所有用户列表,这个时候可以 ...
- IOS界面切换
好吧!表示这几天要实现 phonegap 打开IOS原生界面,因此也查询了一些方案. 有如下几种: 第一种:navigationcontroller //进入下层 [self.navigationC ...
- python文件打包格式,pip包管理
1..whl是python文件的一种打包格式, 在有些情况下,可以将文件的后缀名改为.zip并解压 2.cmd中,提示pip版本太低,先升级pip pip install --upgrade pi ...
- 【python】dict。字典
特点:以空间换取时间,使用HASH算法通过key算出了value的内存地址,建立索引,拿到key后查找速度快,但内存浪费多 因为是用key值算的内存地址,所以key为不可变变量 (set,和dict类 ...
- 毕向东day23--java基础-网络总结
传输层:TCP/UDP UDP例如:qq聊天,录屏软件,桌面共享 TCP建立链接:三次握手,例如,我叫你一声老王(一次),老王回答说:到.(二次),我对老王说,我知道你到了.(三次握手)! ...
- PAT 08-2 求矩阵的局部最大值
这题挺简单的,但,每日一篇.说两点:第一,我的粗心导致我这题花了大把的时间去找错误,看到4个测试用例对了三个,我以为是那块的边界条件没考虑到,又或者是存在隐蔽的逻辑或语法错误,通过与别人程序的反复对比 ...
- RabbitMQ、Redis
进程QUEUE,可以是父进程与子进程间进行交互,也可以是同属于一个父进程的子进程间的交互:如果要实现进程A与进程B之间的通信,就需要借助一个中间进程了,我们习惯称为消息队列. QQ无法直接与WORD通 ...