从我们接触Java的时候,就被告知基础类型byte是一个字节,占8位,表示的范围是-128~127。那么为什么会这个范围呢?


  咱们先回顾一下计算机基础:

1. 在计算机内部数据的存储和运算都采用二进制;
2. 计算机中数据分为有符号数和无符号数,对于有符号数,计算机规定用最高位来表示符 号。“0”表示正数,“1”表示负数;
3. Java中的数据都是有符号数;
4. 计算机中带符号的整数都是使用二进制的补码。

这里提到了一个概念补码,那么就得补充原码和反码。
[原码]:计算机中将一个数字转换为二进制,并在其最高位加上符号的一种表示方法。
[反码]:根据表示规定,正数的反码就是本身,而负数的反码,除符号位外,其余位依次取反。
[补码]:根据表示规定,正数的补码就是本身,而负数的补码,是在其反码的末位加1。
举个例子:
正数 5 和 负数 5
5 原码:00000101     -5 原码:10000101
 反码:00000101     -5 反码:11111010
 补码:00000101     -5 补码:11111011


  不难想到Java中byte能够表示的最大二进制是01111111,换算成十进制就是127(1+2+4+8+16+32+64)。
而能够表示的最小二进制是10000000。但是注意,这是一个补码,我们需要根据规则反向求出它本身的原码,首先减去1,得到01111111,然后在求反,得到10000000,换算成十进制就是128,加上符号,即-128。
  最后说一个小技巧:对于负数求补码的时候,可以从原码低位开始,遇到第一个1就保留,后面各个位依次取反,当然符号位依然不变。
  还是上面的-5例子求补码,从原码低位开始,第一位是1,保留,然后后面的位依次取反,符号位不变,得到11111011。

java byte为何范围是-128~127的更多相关文章

  1. Java Integer(-128~127)值的==和equals比较产生的思考

    最近在项目中遇到一个问题,两个值相同的Integer型值进行==比较时,发现Integer其中的一些奥秘,顺便也复习一下==和equals的区别,先通过Damo代码解释如下: System.out.p ...

  2. java byte 16进制转换

    整型转16进制: int devIdInt = Integer.parseInt(devId);String devIdString = Integer.toHexString(devIdInt); ...

  3. Java byte[] 转C# byte[]

    byte(C# 参考) byte 关键字代表一种整型,该类型按下表所示存储值: 类型 范围 大小 .NET Framework 类型 byte 0 到 255 无符号 8 位整数 Byte 参考msd ...

  4. 接口开发中 遇到的坑——Java byte与C# byte 数据转换问题

    前提: 公司与其他公司进行接口对接 需要使用Byte[]数据流传输数据 原本想法如下:直接IO生成就ok了 using System; using System.IO; using System.Te ...

  5. byte类型的取值为什么是-128~127

    参考:https://blog.csdn.net/qq_22771739/article/details/84496115 https://blog.csdn.net/boatalways/artic ...

  6. byte的取值范围是-128~127,那么包含-128和127吗?

    本帖最后由 王德升老师 于 2019-12-27 17:56 编辑 byte的取值范围为什么是-128~127?如果面试官问你取值范围包含127吗?1. 首先我们知道Java中byte类型是1个字节占 ...

  7. 为什么数值类型byte取值范围是(-128~127)?

    在解决这个问题之前,我们先了解几个概念? 一.原码, 反码, 补码的概念 正数的反码和补码都与原码一样: 负数的反码.补码与原码不同,负数的反码:原码中除去符号位,其他的数值位取反,0变1,1变0.负 ...

  8. java jdk缓存-128~127的Long与Integer

    先推断下以下代码的输出结果 Qa:----------------------------------------------           Long a = Long.valueOf(127) ...

  9. 获取java byte的无符号数值

    byte a = (byte)234; System.out.println(a); 上面的代码,结果是-22,因为java中byte是有符号的,byte范围是-128~127. 如果想输出234,该 ...

随机推荐

  1. Canvas清屏的实现

    /** * Canvas清屏的操作 * * 參考资料: http://blog.csdn.net/lfdfhl/article/details/9076001 * */ private void cl ...

  2. jquery获取对象的方法足以应付常见的各种类型的对象

    简单对象获取 $("element:first") 获取页面上某个元素的第一个如$("div:frist")表示第一个div $("element:l ...

  3. CopyOnWriteArrayList分析

    ArrayList是比较常用的一个可变大小的数组集合,但是是不能同步的.如果多个线程同时访问一个ArrayList实例,其中至少一个线程从结构上修改了列表,那么它必须保持外部同步.一般通过加锁对象进行 ...

  4. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.4——自定义代码集合

    问题: 你想要在项目中使用非标准的代码目录. 解决方案: 在gradle的build配置里面使用sourceSets属性. 讨论: Android分发的samples里面使用多个代码目录,使得通用的文 ...

  5. boost::archive::binary_iarchive

    #include <iostream> #include <string> #include <sstream> #include <vector> # ...

  6. iOS 状态栏更改为白色

    如果觉得在iOS 7启动期间状态栏黑色不合你意,以下方法可改变Status bar style成白色 在工程的plist添加 Status bar style,改变style值 默认是Gray sty ...

  7. Oracle Instant Client的安装和使用

    转自:https://www.cnblogs.com/chinalantian/archive/2011/09/09/2172145.html 根据自己需求到Oracle网站(http://www.o ...

  8. [LintCode] 合并排序数组II

    class Solution { public: /** * @param A: sorted integer array A which has m elements, * but size of ...

  9. 基于kubernetes集群的Vitess最佳实践

    概要 本文主要说明基于kubernetes集群部署并使用Vitess; 本文假定用户已经具备了kubernetes集群使用环境,如果不具备请先参阅基于minikube的kubernetes集群搭建, ...

  10. POJ 1423 Greatest Common Increasing Subsequence【裸LCIS】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1423 http://acm.hust.edu.cn/vjudge/contest/view.action ...