byte 的取值范围:-128 - 127

基本的数学计算方法,一个byte占8位,第一位为符号位,还有7位,7位能表示最大为:2^7 - 1 怎么来的呢:看如下数学计算

1111 111 = 2^0 + 2^1 +  2^2 +  2^3 +  2^4 +  2^5 +  2^6 我们不用使用加法来算这个值,而是换种思路,如下:

(A * 2) - A = A 本身,对吧,那么:

(2^0 + 2^1 +  2^2 +  2^3 +  2^4 +  2^5 +  2^6 )* 2 - ( 2^0 + 2^1 +  2^2 +  2^3 +  2^4 +  2^5 +  2^6 )= 依然是  2^0 + 2^1 +  2^2 +  2^3 +  2^4 +  2^5 +  2^6  的和

即:

2^1 + 2^2 +  2^3 +  2^4 +  2^5 +  2^6 +  2^7 -

2^0 + 2^1 +  2^2 +  2^3 +  2^4 +  2^5 +  2^6  通过抵消,最终变成了 2^7 - 2^0 = 2^7 - 1 = 127,就是这么来的。。。。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

我们只讨论 byte; byte  在计算机中是8位;第一位为符号位。0表示正数,1表示为负数,其余的7位表示 具体的值。要理解一点 就是 数值在计算机内存中的存储是补码的方式

存储的,有一定的规则,即正数的话 原码 反码 补码 一样,负数的话,原码是负数的绝对值,最高位 是1 ,反码是 最高位不变,然后其余位 取反 ,补码是 最高位不变,反码+1

举例:byte 能表示的正数的最大值为:

0111 1111 = 2的7次方 -1 = 127。

正数最小值为:

0000 0000 = 0;

正数的原码,反码 补码 相同。

再来看负数的最大负值:

1111 1111 = -2的7次方 -1 = -127

原码:1111 1111

反码:1000 0000

补码:1000 0001

------------------------------

再来看负数的最接近正数的值,即最小负值:

1000 0000 = -0;

原码:1000 0000

反码:1111 1111

补码:1000 0000(注意这里溢出了)

可见,-0 的原码 和 补码是一样的,实际上 计算机规定的,1000 0000 = -128 ;

通常说 -128 只有补码,没有原码和反码,因为原码是 -0 ,-0 你怎么能认为是 -128呢。

即:-128在计算机中的补码为:1000 0000  ,没有原码和反码;

是可以进行运算的,比如:

-128 + 3 = -125 在计算机中的计算如下:

补码(1000 0000)+ 补码(0000 0011)= 补码(1000 0011)

然后再把1000 0011转换成原码的步骤为:

符号位不变取反:1111 1100

取反后加1就是原码:1111 1101

再把原码转成十进制为:-125,计算的方法如图:

用计算器计算最快:原码去掉符号位,即:1111 1101  -->> 111 1101(7位) 粘贴在计算机的二进制那里:

总结:补码 1000 0000 就是 -128的意思,经过计算你会发现原码也是:1000 0000 ,但是我们通常说 1000 0000 没有原码,因为-0没有意义。

Java 中,byte 数据类型的取值范围为什么是 -128 - 127 ?其它数值类型 都雷同的更多相关文章

  1. C语言中各个数据类型的取值范围

    因为CPU的差异,各系统中的数据类型所占的字节数(bytes)不同,二进制位数(bit)也不同.那么怎样才能知道自己系统的数据类型的字节数,位数呢? 授之以鱼不如授之以渔,大家可以自己从电脑里获取这些 ...

  2. 关于JAVA中Byte数据类型二进制赋值运算报错问题

    自从JDK7更新之后,新增了二进制变量的表示,支持将整数类型用二进制来表示,用0b开头: 例如: byte b= (byte) 0b1000_0001; short s = (short) 0b100 ...

  3. JAVA中的变量及取值范围

    字节是二进制数据的单位.一个字节通常8位长.但是,一些老型号计算机结构使用不同的长度.为了避免混乱,在大多数国际文献中,使用词代替byte.变量: 变量的数据类型:变量名=变量值 数据类型 基本型 数 ...

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

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

  5. 带符号的char类型取值范围为什么是-128——127

    以前经常看到带符号的char类型取值范围是-128——127,今天突然想为什么不是-127——127,-128是怎么来的? 127好理解,char类型是8位,最高位是符号位,0正1负,所以011111 ...

  6. java中给集合快速取值最大值和最小值

    public static void main(String[] args) { List list = new ArrayList(); list.add(new Double(123.23)); ...

  7. Java中byte、short、char、int、long运算时自动类型转化问题

    -------------------------------------------------------------------------------------------------- ★ ...

  8. mysql中数据类型的取值范围

    mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下: 1.bigint 从 -2^63 (-9223372036854775808) 到 2^ ...

  9. 关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)

    先看一段推理<*一切都是在8个比特位的前提下,讨论二进制的符号位,溢出等等,才有意义*> +124:0111 1100 -124:1000 0100 +125:0111 1101 -125 ...

  10. Java中基本数据类型byte的溢出问题

    Java中基本数据类型byte的溢出问题 问题源于:https://www.cnblogs.com/HuoHua2020/p/12326631.html 定义两个byte类型的数据,将其之和赋值给一个 ...

随机推荐

  1. 六、java操作swift对象存储(resultful方式实现)

    系列导航 一.swift对象存储环境搭建 二.swift添加存储策略 三.swift大对象--动态大对象 四.swift大对象--静态态大对象 五.java操作swift对象存储(官网样例) 六.ja ...

  2. 全流程机器视觉工程开发(二)PaddleDetection:拉框,然后开始训练模型

    前言 我现在在准备做一个全流程的机器视觉的工程,之前做了很多理论相关的工作.大概理解了机器视觉的原理,然后大概了解了一下,我发现现在的库其实已经很发展了,完全不需要用到非常多的理论,只需要知道开发过程 ...

  3. [吉他谱]duvet

  4. freeswitch自带yum源配置方式

    概述 在开发过程中,我们使用freeswitch源代码编译安装的方式比较多,这种方式适合对fs比较了解,有一定基础的研发人员. 但是,对于希望快速上手使用fs普通功能的人员来说,源代码编译的方式就过于 ...

  5. python毕业设计选题15例,马上要毕业啦,大家做好准备了没

    Hi,大家好,大四的同学马上要开始毕业设计啦,大家做好准备了没! 学长给大家详细整理了最新的python计算机毕设相关选题,对选题有任何疑问,都可以问学长哦. 1. 网上商城系统 这是一个基于pyth ...

  6. 26-IP调用 - PLL

    1.PLL IP核简介 PLL(Phaze Locked Loop)锁相环是最常用的IP核之一,其性能强大,可以对输入到FPGA的时钟信号进行任意的分频.倍频.相位调整.占空比调整,从而输出一个期望时 ...

  7. 09-Verilog-并发线程

    Verilog-线程 并发线程 verilog和C语言有一个最大的不同就是并发性 并发--同时进行的过程 module tb_test; int a; initial begin a = 1; a = ...

  8. Go-命令行参数解析

    1. 解析命令行参数 程序在执行时,获取在命令行启动程序是使用的参数 命令行( Command line interface -- CLI):基于文本来查看.处理.操作计算机的界面,又被称为 终端.控 ...

  9. 【面试题精讲】JVM中有哪些垃圾收集器

    有时博客内容会有变动,首发博客是最新的,其他博客地址可能未同步,请认准https://blog.zysicyj.top 首发博客地址 系列文章地址 在Java虚拟机(JVM)中,有以下几种常见的垃圾收 ...

  10. [转帖]Linux cache参数调优

    https://zhuanlan.zhihu.com/p/136237953 缓存机制(cache)是保证Linux环境下对硬盘/flash操作效率的有效方式.cache建立在内存中,它缓存了硬盘/f ...