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基础类型与其二进制表示的更多相关文章

  1. java基础类型的byte为长度

    java基础类型的字节长度: 类型 byte数/位数 最大/最小值 byte 1/8 127/-128 short 2/16 32767/-32768 int 4/32 2147483647/-214 ...

  2. Java基础类型总结

    最近一直在总结反思自己, 趁着现在请假在学校上课的空余时间,从基础开始重新温故学习下Java,充实下自己. 一.数据类型 从下图中,我们可以很清晰的看出Java中的类型,其中红色方框中的是Java的4 ...

  3. Java基础类型自动装箱(autoboxing)

    Java SE 1.5 版本及之后,开始提供自动装箱功能. 自动装箱,将基础类型“包装”成一种类型: 基本类型 -->  包装器类 如下过程可触发自动装箱过程: Integer count = ...

  4. java基础类型中的char和byte的辨析及Unicode编码和UTF-8的区别

    在平常工作中使用到char和byte的场景不多,但是如果项目中使用到IO流操作时,则必定会涉及到这两个类型,下面让我们一起来回顾一下这两个类型吧. char和byte的对比 byte byte 字节, ...

  5. java基础类型数据与String类包装类之间的转换与理解

    数据类型转换一般分为三种: 在java中整型,实型,字符型视为简单数据类型,这些数据类型由低到高分别为:(byte,short,char--int-long-float-double) 简单数据类型之 ...

  6. java基础类型源码解析之String

    差点忘了最常用的String类型,我们对String的大多数方法都已经很熟了,这里就挑几个平时不会直接接触的点来解析一下. 先来看看它的成员变量 public final class String { ...

  7. Java 基础类型

    在Java中,基本的数据类型主要有8种: 1)int  4 字节(byte)  -2的31次方到2的31次方-1 2)short 2 字节(byte) -2的15次方到2的15次方-1 3)long ...

  8. Java 基础类型 默认值

    (1)数据库里的列,如果有默认值,不能赋值有业务含义的值. (2)int 默认值 java会分配默认值的额.

  9. java基础类型源码解析之HashMap

    终于来到比较复杂的HashMap,由于内部的变量,内部类,方法都比较多,没法像ArrayList那样直接平铺开来说,因此准备从几个具体的角度来切入. 桶结构 HashMap的每个存储位置,又叫做一个桶 ...

随机推荐

  1. [Js]缓冲运动

    一.运动框架 1.在开始运动时,关闭已有定时器(否则会不断有新的定时器执行) 2.把运动和停止隔开(if/else) 二.缓冲运动 逐渐变慢,最后停止(距离越远速度越大) 速度=(目标值-当前值)/缩 ...

  2. IT公司100题-1-二叉树转换为双链表

    问题描述: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 10   /   \  6      14/  \    /   \4   8 1 ...

  3. outlook新邮件到达提醒设置以及outlook最小化到托盘设置

    有些邮件是需要马上处理的,因此希望能在收到邮件之后马上就知道,但是有不希望频繁的去检查有没有.outlook可以帮我们轻松做到新邮件到达提醒. 一 .设置outlook新邮件到达提醒:选项->电 ...

  4. raspbian 静态IP

    edit file:  /etc/network/interfaces change line: iface eth0 inet dhcp iface eth0 inet static address ...

  5. Openstack Swift中间件编写

    关于openstack swift的资料可以看这里,这里还有这里. 准备环境 从零开始接触的同学可以先从swift的all in one部署开始学习,在本机搭建好swift环境就可以进行简单的测试了. ...

  6. PHP同一个IP绑定多个域名(六)

    原理图 一个ip绑定如何绑定多个域名? 解决方案: A.方案一:端口号来区别不同的站点 1.绑定一个网站 1.1先开发好自己的网站 d:/ApacheProject/myanimal 1.2 配置我们 ...

  7. 针对初学者的A*算法入门详解(附带Java源码)

    英文题目,汉语内容,有点挂羊头卖狗肉的嫌疑,不过请不要打击我这颗想学好英语的心.当了班主任我才发现大一18本书,11本是英语的,能多用两句英语就多用,个人认为这样也是积累的一种方法. Thanks o ...

  8. 主线程中一定不能放耗时操作,必须要开子线程,比如下载文件,不然会不让你拿到输入流--报错显示android.os.NetworkOnMainThreadException

    1.必须要开子线程来操作耗时操作,android.os.NetworkOnMainThreadException new Thread(new Runnable() { @Override publi ...

  9. poj2769 暴力

    //Accepted 208 KB 157 ms //纯暴力 //vis数组初始化时要用多少设置多少,不然TLE #include <cstdio> #include <cstrin ...

  10. C++数据结构之链式队列(Linked Queue)

    C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从 ...