遇到过很多关于 数值类型范围的问题了,在这做一个总结,我们可以从多方面理解不同数值类型的所能表示的数值范围

在这里我们只谈论 java中的数值类型

首先说byte:

这段是摘自jdk中 Byte.java中的源代码

从这里可以看出 byte的取值范围:-128 --- 127;

从计算机组成原理的角度可以解释:byte在计算机中是占8个字节的 而且byte 是有符号整形 用二进制表示时候最高位为符号位 0代表正数 1代表负数。

最大值:127      0111 1111 即2的7次方减去1;

最小值:-128 这个数字曾经困扰我很久, 要知道正数在计算机中是以原码形式存在的,负数在计算机中是以其补码形式存在的,那么一个负数的补码是怎么计算的呢? 就是负数的绝对值的原码转为二进制再按位取反后加1,

下边这个10和-10为例来介绍的 :10原码:0000 1010   它在计算机中的存储就是 0000 1010, 那么-10呢? 按照前面说的 算除其绝对值为10,转为二进制 0000 1010 按位取反 1111 0101 再加1后:1111 0110,此为-10补码 ,好的,计算机中的1111 0110就是代表-10了。

我们来看 -128  绝对值128的二进制表示:1000 0000 按位取反 0111 1111 加1后:1000 0000,也就是说 -128在计算机中的表示就是 1000 0000 了, 再来看一下-129 在计算机中的表示,绝对值129的范围已经超出了了byte的位数。

再有还可以通过

输出Byte的最大值和最小值。

综上所述 byte的取值范围只能是:-128 -- 127了  即 负的2的7次方到2的7次方减去1。

相应的 short 作为16位有符号整形,int作为32位有符号整形,  long 作为64位有符号整形 都可以如上计算出 取值范围

char作为16位无符号整形 其范围为 0 -- 2的15次方 这无可争议

摘自 Character.java中的源代码:

float作为32位的浮点型:

摘自Float.java源码:

double 作为64为浮点型

Double.java源码:

java char short区别_java 彻底理解 byte char short int float long double相关推荐

  1. java编程int和byte的用法_Java中的Byte Array和Int转换

    Java中的Byte Array和Int转换 我有这两个函数有一些困难: byteArrayToInt和intToByteArray . 问题是,如果我使用另一个来得到另一个结果,结果是不同的,你可以 ...

  2. java c 引用区别_Java的引用c++的引用和C指针的区别

    Java的引用本质上就是C中的指针,而c++的引用则完全不同:有一个类 class Point { int x; int y; } 同样的一个Point p; 在Java中p表示一个引用,它等同于C语 ...

  3. java byte转成int数组_Java任意长度byte数组转换为int数组的方法

    前言 嗯.最近工程上遇到一个byte数组转换为int的问题,解决过程中遇到了几个坑,经过各种查资料终于还是解决了.撒花. Java的位运算以及byte数组与其他类型数据的转换比c/c++感觉麻烦一些. ...

  4. java byte数组转int数组_Java任意长度byte数组转换为int数组的方法

    前言 嗯.最近工程上遇到一个byte数组转换为int的问题,解决过程中遇到了几个坑,经过各种查资料终于还是解决了.撒花. Java的位运算以及byte数组与其他类型数据的转换比c/c++感觉麻烦一些. ...

  5. java nio nio2 区别_Java NIO2:NIO概述

    一.概述 从JDK1.4开始,Java提供了一系列改进的输入/输出处理的新特性,被统称为NIO(即New I/O).新增了许多用于处理输入输出的类,这些类都被放在java.nio包及子包下,并且对原j ...

  6. java和javascript区别_java和javascript之间有什么区别

    java和javascript之间有什么区别?本篇文章就给大家介绍java和javascript之间的区别,让大家了解java和javascript是什么?它们之间的差异有哪些.有一定的参考价值,有需 ...

  7. java和equals区别_JAVA中==与equals的区别

    equals如果没有被重写的话,和==的作用是一样的,都是判断两个对象引用是否指向同一个地址.一般重写了equals()方法就表示比较它们"实际意义上相等",比较的是内容,而不是引 ...

  8. java痴和堆_JAVA虚拟机理解 - 爱笑的痴迷者的个人空间 - OSCHINA - 中文开源技术交流社区...

    JVM定义: JVM(Java Virtual Machine),是一种运行Java程序的软件实现,是虚拟的机器.Java程序与平台无关,它直接在虚拟机中运行. JVM运行过程: JVM将内存分划如下 ...

  9. java 栈 堆 区别_java中栈与堆的区别

    1. 栈(stack)与堆(heap)都是Java用来在Ram(random access memory随机存取器)中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. ...

最新文章

  1. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(13)-系统日志和异常的处理③
  2. GC详解及Minor GC和Full GC触发条件总结
  3. 三面百度AI岗,炸了
  4. selenium截图模糊_Selenium截屏 图片未加载的问题解决--【懒加载】
  5. 正确地启动hadoop
  6. IOS考试题3字体变大变小
  7. [vue] vue怎么获取DOM节点?
  8. 11. javacript高级程序设计-DOM扩展
  9. activiti 多部门审批_Activiti 基本介绍
  10. OPencv_边缘检测算法
  11. NodeJs局域网开启服务
  12. 【读书笔记】代理模式代码(C#)
  13. [高通MSM8909][Android7.1]电信卡信号优化
  14. 基于ssm的超市进销存管理系统
  15. 卡诺模型案例分析_客户满意之卡诺模型
  16. 去除idea中代码的波浪线(黄色警告线)
  17. 运算放大器的简要理解
  18. 华为充电的效果_华为充电特效主题插件下载-华为炫酷充电特效插件1.0.1安卓版-精品下载...
  19. c语言 修改文件权限666,chmod 777 修改权限
  20. Sorted Adjacent Differences

热门文章

  1. .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
  2. Linux工程师新法宝:在Visual Studio上用C++ 写Linux
  3. MySQL - 存储过程
  4. [转]在C#中像Python一样编写TensorFlow机器学习代码
  5. 【ArcGIS风暴】GlobeLand30全球数据处理教程(批量投影转换、无效值处理、拼接)
  6. TLS/SSL协议工作原理
  7. linux block设备,Linux I/O Block--块设备的表示
  8. 判断输入的整数是否为素数_C语言 | 判断是否素数
  9. 主成分分析步骤_多元分析(1)--主成分分析
  10. python实例化是什么意思_Python中实例化class的执行顺序示例详解