首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么浮点数(32位)的指数是Java -126而不是-128?

浮点数(32位)的指数是Java中的-126而不是-128的原因是因为浮点数的指数部分采用了偏移表示法。

在Java中,浮点数的指数部分使用8位来表示,其中7位用于表示指数的值,剩下的1位用于表示正负号。由于指数部分需要表示负数,因此使用了偏移表示法。

在偏移表示法中,偏移值是通过将表示的最小值加上一个偏移量来得到的。对于32位浮点数,指数部分的最小值是-127(全为0),因此偏移值为1。这意味着实际的指数值是表示的值减去偏移值。

因此,-127 - 1 = -128,实际上-128是浮点数指数的最小值。然而,由于指数部分的1位用于表示正负号,因此最小的实际指数值是-127。

所以,浮点数(32位)的指数是Java中的-126而不是-128。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么 useState 返回 array 不是 object?

[count, setCount] = useState(0) 这里可以看到 useState 返回一个数组,那么为什么返回数组不是返回对象呢?...为什么返回数组不是返回对象 要弄懂这个问题要先明白 ES6 解构赋值,来看 2 个简单例子: 数组解构赋值 const foo = [1, 2, 3]; const [one, two, three...,这个问题就很好解释了 如果 useState 返回数组,那么使用者可以对数组中元素命名,代码看起来也比较干净 如果 useState 返回对象,在解构对象时候必须要和 useState 内部实现返回对象同名...总结 useState 返回 array 不是 object 原因就是为了降低使用复杂度,返回数组的话可以直接根据顺序解构,返回对象的话要想使用多次就得定义别名了 首发自:为什么 useState...返回 array 不是 object?

2.2K20

Java里面Join(),为什么等待主线程,不是当前子线程?

但是仔细一想,发现这个明明调用子线程join()方法,按道理应该子线程等待执行才是,为什么反而是主线程等待了呢?...源码中注释说明等待这个线程终止,那就是等待调用Join()线程终止,再继续往下看: /** * Waits at most {@code millis} milliseconds for...注意按照程序执行顺序,我们这里主线程调用ThreadJoin方法,所以是判断子线程存活状态,满足则让子线程执行,主线程来等待。...wait 等待方法让线程进入等待队列,使用方法 obj.wait(); 这样当前线程就会暂停运行,并且进入obj等待队列中,称作“线程正在obj上等待”。...可以把子线程t理解为一个普通obj对象,调用twait()方法,实际上就是主线程(main线程)在childThread对象队列上等待,可以转换为如下写法进一步理解: /** * 主线程 */

78950

奇怪Java题:为什么128 == 128返回为false,127 == 127会返回为true?

奇怪Java题:为什么128 == 128返回为false,127 == 127会返回为true? 在回答这个问题之前,我们先来看看int和Integer对比,一步步揭开问题答案。...基本类型(原始数据类型)在传递参数时都是按值传递,封装类型按引用传递(其实“引用也是按值传递”,传递对象地址)。 由于包装类型都是不可变量,因此没有提供改变它值方法。...java API中对Integer类型valueOf定义如下,对于-128到127之间数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127...如果超过128就会重新new一个新对象 解析原因: 归结于java对于Integer与int自动装箱与拆箱设计,一种模式:叫享元模式(flyweight)。 1....如果超过了从–128到127之间值,被装箱后Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象。

2.2K31

float double取值范围_double float区别

Java浮点数 浮点数结构 要说清楚Java浮点数取值范围与其精度,必须先了解浮点数表示方法,浮点数结构组成,之所以会有这种所谓结构,是因为机器只认识01,你想表示小数,你要机器认识小数点这个东西...Java浮点数采用IEEE 754标准。 IEEE 754 这里就不细说什么IEEE 754了,就直接讲具体内容,有兴趣可以自己百度。...上面的“——”表示中间不能取值,例如负无穷到 − 2 128 -2^{128} −2128中间取不到(事实上128也是取不到,只是接近近似值),但这并不是意味着,“~”任意值都能取到,要注意...} 2−23,则-127-23 = -150),可不知道为什么149,我查到资料说,全0,全1为特殊值,不作为范围内值,上面的float最大最小值Float.MAX_VALUE都是接近 2 128...,0);//结果为1.0 //另外NaN == NaN; false 浮点数精度 精度由尾数决定为什么

1.9K10

Java 中 byte 取值范围为什么 -128 到 +127

首先要了解概念 Java 中用补码表示二进制数,补码最高位代表符号位,最高位 1 则表示为正数,最高位 0 则表示为负数。 正数补码本身,负数补码其绝对值二进制位按位取反后 +1。...即表示 -60 二进制表现形式 1100 0100。 回到正题,那么 byte 表示一个字节,一个字节 8 位,最高位符号位。...最小负数就是1000 0000,(最大负数 1111 1111 负数-1补码),换算成十进制就是 -128, 1000 0000 最小负数补码表示形式,我们把补码计算步骤倒过来就即可。...1000 0000 减 1 得 0111 1111 然后取反 1000 0000 因为负数补码其绝对值取反,即 1000 0000 为最小负数绝对值, 1000 0000 十进制表示 128...,所以最小负数 -128

2K20

为什么 Docker 和 Kubernetes 用 Go 写不是 C# ?

HahahahahaSoFunny 为什么 Docker 和 Kubernetes 工具用 Go 写不是 C#? 总所周知,现在开发人员使用很多新工具大多是用 Go 写。...为什么不是 C# 呢? .NET 和 C# 现在功能已经很强大了,是不是社区缺少这种文化?如何才能培养一种更加开源文化, 因为很多开发人员对 .NET 和 C# 仍然还抱有偏见。...haho5: 不确定为什么 Docker 用 Go 写, 但是 Kubernetes 确实是 Google 开发, 并且 Golang 也是。...像 C/C++ 这样稍微低级语言可以让您更接近硬件,对性能有要求时,这是最合适。 我可以用螺丝刀敲打钉子很多次,也可以用锤子花很大力气把螺丝打进去,都可以完成工作。...它从 2.0 到现在 10.0 变化非常快,相同代码逻辑可以用太多不同方式编写。 GO 一门简单语言,很受欢迎,因为好代码应该易于阅读和理解,以便成千上万开源程序员做出贡献。

1.1K00

单精度浮点数取值,表示以及相关

单精度浮点数可以表示1.175 * 10-38(1.00…0×2^-126数据不损失精度。 0-00000001-00000000000000000000001(22个0,最后一位1) ?...浮点数最小能表示当阶码都是0时,表示2^-126*0.fractionbits ? ps:以上图片从 这个网址 截取。...(注意这里0.fractionbits,应该是为了和阶码-126时候做出区分,其实也就是比-126时候能表示数更小了) 如果指数位全是1,尾数位全零,表示正负无穷 如果指数位全是1,尾数位是非零...这样结合上面讲知识就显而易见了,以10000000为例,256 - |x| = 128.所以表示x=-128 移码 虽然补码解决了负数问题,但是补码还是有一定缺陷,就是比较大小不方便,进行浮点数运算时候...ps:为什么为什么用127做偏置不是128:据说是为了让数表示范围对称( 原文 ),但是感觉比较牵强而且也不比用128时对称 半精度与单精度转换 主要是最近在研究f16和f32转换才看了上面一堆东西

3.1K20

为什么企业数据库转向 CLOUD DATABASE 不是国产数据库

这些对于数据库有什么影响,其实就是成本问题,一个企业本身一个盈利机构,盈利机构中就必须要针对投入产出比进行衡量,IT 成本尤其机房建设本身对于企业消耗蛮大,并且这些还是一个持续性投入,...随着经济问题凸显,各个企业项目会缩减,维稳一个主基调,对于一些项目的建设大多是基于灵活性运作方式,也就是项目走一步算一步,并且灵活性很高,针对这些新项目的建设就需要评估,而在搞不清这些项目的持续回报情况下...国产数据库本身买家大部分都不是企业,而是国内政府机构,之前国内政府机构预算充足,可以进行阶段化持续性购买,并且对于投入产出比并不会进行细致估算,大多是形象项目。...同时对于企业来说,降低IT 类雇员数量也是一个轻装上阵方式,更少维护人员,与更高稳定性本身并不是一个矛盾体,通过云上基础建设可以满足以上要求。...基于数据库产品,国内大部分云厂商都提供了产品,并且随着使用企业越来越多,对于产品持续迭代和快速更新也是吸引企业持续使用云上产品保证书,终究企业都是希望使用产品被验证过不是去当小白鼠。

74440

小朋友学C语言(43):浮点数深入分析

以单精度浮点数为例,它指数8个比特,固定偏移值28-1 – 1 = 127。此为有号数表示方式,单精度浮点数指数部分实际取值从-128到127。...例如,最小规约形式单精度浮点数指数部分编码值为1,指数实际值为-126;而非规约单精度浮点数指数域编码值为0,对应指数实际值也是-126不是-127。...例16:求非规约数0 00000000 00000000000000000000001所表示十进制 分析: 因为是非规约数,所以指数-126不是0 – 127 = -127; 非规约数尾数部分没有隐含...例17:求非规约数0 00000000 11111111111111111111111所表示十进制 分析: 因为是非规约数,所以指数-126不是0 – 127 = -127; 非规约数尾数部分没有隐含...2-126与0之间距离为2-126,如果不采用渐进式下溢出,那么绝对值最小规约浮点数与0距离相邻浮点数之间距离223倍!可以说是非常突然下溢出到0。

1.8K31

Java 基本类型各种运算,你真的了解了么?

-127,不是 129。...原来 Java 在做高精度到低精度类型转换过程中,丢失了精度。至于精度为什么会丢,为什么打印出来另外一个值,我们需要先明确一个计算机基础知识。...253 −125 −2 -3 1000 0001 129 -1 −126 -127 1000 0000 128 -0 −127 -128 (补码示例数据表) 补码这种表示方式很适合计算机处理,依然上面的减法问题...在符号位右侧分配 8 位用来存储指数,IEEE754 标准规定阶码位存储指数对应移码,不是指数原码或补码。 所谓移码,就是将一个真值在数轴上正向平移一个偏移量后得到。...,比如 1.0 减去 0.9 在计算机世界里居然不是整整 0.1,其实在浮点数世界里容易被你忽略甚至用错点还很多,比如判断两个浮点数是否相等,如果直接用 == 会让程序出错

72720

为什么java不是最强语言JVM确可以叫做最强虚拟机呢?

为什么我们要学习jvm 面试需要 尤其大厂 对于jvm重视程度还是比较高 中高级程序员必备技能 项目管理,调优需要 追求极客精神 垃圾回收算法,JIT,底层原理 java可能不是最好语言但是...anywhere 在任意一个地方编写,在任意平台上运行 java虚拟机通过java编译出字节码文件,来实现全平台运行 为什么我们要说JVM最强虚拟机呢,应为它不只是可以多平台运行java...java虚拟机平台运行非java程序语言编写程序 Java虚拟机根本不关心运行在其内部是什么语言,他只关心最后生成字节码文件,也就是说java虚拟机拥有与语言无关性特质,他并不是单纯java...Class文件有所关联,Class文件中包含了java虚拟机指令集和符号表 混合特性 Java平台上多语言混合编程正成为主流,通过特定领域语言去解决特 定领域问题当前软件开发应对日趋复杂项目需求一个方向...Java虚拟机 Java虚拟机一台执行Java字节码虚拟计算机,他拥有独立运行机制,其运行java字节码也未必由Java语言编译而成, JVM平台各种语言可以共享JVM带来跨平台性和优秀垃圾回收器以及稳定即时编译器

48710

C语言浮点数float类型秘密

浮点数存储由符号位 (sign) + 指数位 (exponent) + 小数位 (fraction) 组成。...浮点数转换到内存中存储步骤分为如下三步: 将浮点数转换成二进制 用科学计数法表示二进制浮点数 计算指数偏移后值 对于第3点:计算指数时需要加上偏移量(后面有介绍为什么使用偏移量),偏移量值与浮点数类型有关...(符号位) 11bits(指数位) 52bits(尾数位) 于是,float指数范围为-127~+128double指数范围为-1023~+1024,并且指数按补码形式来划分。...其中负指数决定了浮点数所能表达绝对值最小非零数;指数决定了浮点数所能表达绝对值最大数,也即决定了浮点数取值范围。...6 解剖:为什么要用偏移量方式来计算指数

4.3K2219

浮点数秘密

浮点数存储由符号位 (sign) + 指数位 (exponent) + 小数位 (fraction) 组成。...浮点数转换到内存中存储步骤分为如下三步: 将浮点数转换成二进制 用科学计数法表示二进制浮点数 计算指数偏移后值 对于第3点:计算指数时需要加上偏移量(后面有介绍为什么使用偏移量),偏移量值与浮点数类型有关...(符号位) 11bits(指数位) 52bits(尾数位) 于是,float指数范围为-127~+128double指数范围为-1023~+1024,并且指数按补码形式来划分。...其中负指数决定了浮点数所能表达绝对值最小非零数;指数决定了浮点数所能表达绝对值最大数,也即决定了浮点数取值范围。...6 解剖:为什么要用偏移量方式来计算指数

58510

基础数据类型之浮点数简介

Java中,基本数据float 和double包装类Float和Double都是浮点类型 所以对于浮点数在计算机中表示方法需要有一个基本了解,否则很难了解清楚Float和Double实现原理 本文对计算机中浮点数表示...单精度 -127 ~ 128 双精度 -1022 ~ 1023 不过头尾 被保留, 会另做他用 ,下面会继续说明所以实际值要去掉头尾,也就是 单精度 -126 ~ 127...: 这是浮点数规范化表示形式S表示符号位尾数部分前隐含一个小数点,小数点前隐含一个1指数真值E 也就是 指数部分表示无符号数减掉指数偏移值 取值范围 单精度 单精度指数范围(指数 - 指数偏移值之后值...0  也就是52个0 1.0 × 2-1022 非标准化形式 试想,对于单精度 1.001×2−125  和1.01×2−125, 它们差值0.001×2−125=1.0×2−128...= 2-52 ×   2-1022 = 2-1074 特殊值 指数部分表示无符号数,头尾被保留,用于表示一些特别的含义 对于标准化形式,指数部分 既不是全0  也不是全1 非标准化情况下

61010

浮点数秘密

浮点数存储由符号位 (sign) + 指数位 (exponent) + 小数位 (fraction) 组成。...浮点数转换到内存中存储步骤分为如下三步: 将浮点数转换成二进制 用科学计数法表示二进制浮点数 计算指数偏移后值 对于第3点:计算指数时需要加上偏移量(后面有介绍为什么使用偏移量),偏移量值与浮点数类型有关...(符号位) 11bits(指数位) 52bits(尾数位) 于是,float指数范围为-127~+128double指数范围为-1023~+1024,并且指数按补码形式来划分。...其中负指数决定了浮点数所能表达绝对值最小非零数;指数决定了浮点数所能表达绝对值最大数,也即决定了浮点数取值范围。...6 解剖:为什么要用偏移量方式来计算指数

56920

是否还在疑惑Vue.js中组件data为什么函数类型不是对象类型

一般我们会以组件化思想去开发(别担心,马上讲解什么组件化思想),所以我们还会用到Vue实例对象中另一个属性components去注册别的组件。...正是因为没有进行挂载,所以这个Vue实例可以被反复使用,也就是说可以在很多个页面都注册一次。...Vue() //此时vm2这样 vm2 = { //这里data,先获取了函数Vue中data(data值为函数),然后得到了data返回值 data: { name: '李四...这是因为这两个实例对象在创建时,先获得了一个函数,将该函数返回值作为了自己属性data值,并且这两个实例对象中data值在栈中对应堆中地址也不一样,所以他们不会互相影响。...因为我们刚开始定义了构造函数Vue时,给他内部data设置了一个值,该值为对象类型,对象类型在js中称为引用数据类型,在栈中存储着一个指向内存中该对象堆中地址。

3.4K30

JDK源码分析 Float

Float 和 Double 一样,只不过 Double 64位,更精确~ 参考链接:Java 浮点数 float和double类型表示范围和精度 表示范围 /** * A constant...float 所能表示最大正数是多少? 简书markdowm语法,连公式都不支持,我也是醉了。 $$ (2 - 2 ^ {-31} ) * 2 ^ {127} $$ 为什么这个数?...符号位肯定为正,不用管;指数范围 -128 ~ 127,所以是 2^127,23位表示小数(1.9999999999)。...符号位:0表示正数,1表示负数; 指数部分: float偏移量为2^8 - 1,double偏移量为2^11 - 1; 尾数部分:实际尾数部分中小数点后数值,规约浮点数使用标准二进制科学计数法表示...-> 1.0011 * 2^3 指数 (3 + 127)=130,二进制 10000010 尾数 0011 000000 0000000000 000 最终 9.5 在内存中存储二进制:010000010

78430

C语言——L数据在内存中存储

我们常⽤ X86 结构小端模式,KEIL C51 则为⼤端模式。很多ARM,DSP都为⼩端模式。有些ARM处理器还可以由硬件来选择⼤端模式还是⼩端模式。...~127 // //-1 -2 -3 ... -128 127 126 125 ... 5 4 3 2 1 0 -1 -2 ... -128 127 126 ... 5 4 3 2 1 //...而在很多其他语言中,比如 Java,char 类型无符号,所以其取值范围 0 到 255。 short 类型通常用于表示短整数,short 类型一个较小整数类型,通常为 16 位。...因此,浮点数V就写成:    V=(-1)^0 × 0.00000000000000000001001×2^(-126)=1.001×2^(-146) 显然,V⼀个很⼩接近于0正数,所以⽤⼗进制...再看第2环节,浮点数9.0,为什么整数打印 1091567616 ⾸先,浮点数9.0等于⼆进制1001.0,即换算成科学计数法:1.001×2^3所以:9.0 = (-1) 0 (1.001)

14210

框架篇-Vue面试题1-为什么 vue 组件中 data 函数不是对象

在vue组件中data属性值函数,如下所示 export default { data() { // data一个函数,data: function() {}简写 return...// data一个对象 name: 'itclanCoder', }, }; 当一个组件被定义,data必须声明为返回一个初始数据对象函数,因为组件可能被用来创建多个实例 也就是说,在很多页面中...,定义组件可以复用在多个页面 如果data一个纯碎对象,则所有的实例将共享引用同一份data数据对象,无论在哪个组件实例中修改data,都会影响到所有的组件实例 如果data函数,每次创建一个新实例后...,实例化出来对象(p1,p2)都指向同一份实体 原型下属性相当于是公有的 修改一个实例对象下属性,也会造成另一个实例属性跟着改变,这样在组件复用时候,肯定是不行,那么改成函数就可以了,如下代码所示...'itclanCoder', }; }; var p1 = new Person(); var p2 = new Person(); p1.data.name = '随笔川迹'; // 如果函数形式去定义属性

1.9K20
领券