java byte为何范围是-128~127

从我们接触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。

原文地址:https://www.cnblogs.com/baxianhua/p/9334871.html

时间: 2024-11-15 16:20:01

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

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

最近在项目中遇到一个问题,两个值相同的Integer型值进行==比较时,发现Integer其中的一些奥秘,顺便也复习一下==和equals的区别,先通过Damo代码解释如下: [java] view plain copy System.out.println("<-128~127以内的Integer值,Integer x = value;的方式赋值!>"); Integer i = 127; Integer j = 127; System.out.println("

java byte 16进制转换

整型转16进制: int devIdInt = Integer.parseInt(devId); String devIdString = Integer.toHexString(devIdInt); 16进制转为字节: byte devBin = (byte) Integer.parseInt(devIdString, 16); byte devBin =Integer.valueOf(devIdString, 16).byteValue(); byte devBin =Byte.parseB

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

前提: 公司与其他公司进行接口对接 需要使用Byte[]数据流传输数据 原本想法如下:直接IO生成就ok了 using System; using System.IO; using System.Text; namespace StreamReader { class Program { public static void Main(byte[] buffer) { System.IO.File.WriteAllBytes(@"D:\合同文件demo.pdf",buffer); }

Java byte[] 转C# byte[]

byte(C# 参考) byte 关键字代表一种整型,该类型按下表所示存储值: 类型 范围 大小 .NET Framework 类型 byte 0 到 255 无符号 8 位整数 Byte 参考msdn: https://docs.microsoft.com/zh-cn/previous-versions/5bdb6693(v=vs.120)?redirectedfrom=MSDN Java byte 也提供了一个byte数据类型,并且是基本类型.java byte是做为最小的数字来处理的,因此

Java byte 类型的取值范围是-128~127

为什么Java byte 类型的取值范围是-128-127 : http://blog.163.com/[email protected]/blog/static/47517863200911314245752/ java基本数据类型的取值范围: http://www.cnblogs.com/singlesoar/p/5688915.html

byte的取值范围为什么是-128~127

直接给总结:计算机规定了0000 0000 代表0,1000 0000代表的-0没有意义,必须找个~127~127之外的数和它对应,「人为规定-0就是-128」,而且这么做完美适合计算机做减法运算. 来我们一步步分析分析: 1.byte占用8位,每位用0或1表示,能够表示256(2^8)个数据. 2.这8位分为符号位(最高位)和数值位(剩余七位),符号位0表示正数,1表示负数. 3.按上一步的理解,容易得到(+127:0111 1111.+1:0000 0001.+0:0000 0000.-0:

为什么一个byte的存储范围是-128~127?

为什么一个byte的存储范围是-128~127?文本关键字:byte.字节.二进制位.反码.补码文章目录为什么一个byte的存储范围是-128~127? 一.byte 二.反码与补码 **1. 反码 补码三.byte的数据范围一.byte**在计算机中,一个二进制位是最小的存储单元,由于是二进制,所以能存储的数字只能是0和1.显然,如果我们直接去操作每个二进制位将是很麻烦的过程,所以在编程中我们直接使用的是其他的数据类型,如:byte.int.float.这些数据类型能够使我们的数据存储更加方便

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

本帖最后由 王德升老师 于 2019-12-27 17:56 编辑 byte的取值范围为什么是-128~127?如果面试官问你取值范围包含127吗?1. 首先我们知道Java中byte类型是1个字节占8位的.最高位是符号位(正数或者负数),其余7位是数值位.     2. [AppleScript] 纯文本查看 复制代码 ? 1 2 byte b1 = 100; byte b2 = -100; 这里报错吗?不报错!3. [AppleScript] 纯文本查看 复制代码 ? 1 2 3 4 byt

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

先判断下下面代码的输出结果 Qa:---------------------------------------------- Long a = Long.valueOf(127); Long b = Long.valueOf(127); System.out.println(a == b); Qb:--------------------------------------------------- Long a = Long.valueOf(128); Long b = Long.value