范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Math。abs竟然返回了负数?

  事情是这样的。
  某一天扯扯群里发来一段代码:
  读者提问道,为啥这个 pos 还要判断一下?
  这代码一看我就熟悉,RocketMQ 的源码,如果你看过源码你会发现到处都有这样的判断。
  想着已经取绝对值了,然后再取余,肯定是正数啊,这  if(pos<0)  不就是多余的判断吗?
  那我们先看一下  Math.abs  的源码:
  可以看到,十分简单粗暴,再结合一下 int ,不知道大家是否已经发现了问题?
  不卖关子了。
  int 的最大值是(2^31) -1,而最小值是-2^31,所以按照 abs 的逻辑,如果a是最小值,则最小值前面加个负数就变成了 2^31,而 int 所能表示的最大值是 (2^31) -1,这比最大值还大了个 1,导致向上溢出,所以此时得到的结果还是最小值。
  你可以试着运行一下上面的结果,所以说 Math.abs 得到的不一定是正数!所以 RocketMQ 的这个判断是有必要滴。
  再解释一下为什么 int 最小值取绝对值还是等于它本身。
  int 是 32 位,为了便于演示,我就拿 8 位来举例子,反正道理是一样的。
  在 Java 中的数字的实现都是有符号位的,不像 C 有个 unsigned 来表示无符号,有符号的数字实现是用最高位来表示符号位,1表示负数,0表示正数。
  回到上面的例子,要表示的正数比最大值还大1,那就把最大值加个1呗。
  图中就是向上溢出得到了最小值,所以最小值取绝对值得到的值比最大值大一,导致向上溢出,又变成了最小值。
  因此  Math.abs(Integer.MIN_VALUE) = Integer.MIN_VALUE
  那为什么 8 位表示的是-128到127而不是-127到128?
  8位二进制,一共有 2^8=256 个坑位,所以能表示 256 个数字,理论上随便怎么表示都ok,你表示-254~1都行。
  但是我们规定无符号数是 0~255,有符号数规定是-128 ~ 127。
  如果有符号数要规定成-127到128并不是不行,但是这样就比较麻烦。
  按照-128 ~ 127这样的实现, 我们只要通过最高位就可以判断一个数的正负 ,而-127~128就需要排除128这个特例,也就是之前只需要判断最高位,现在变成需要判断最高位为 1 且其它位不全是 0 才是负数。
  这样电路设计也要变复杂了,所以我们规定是 -128到127,32位也同理。
  Math.absExact
  这种出错了但是没有提示的 Math.abs 肯定是不好的,所以在 JDK 15 出了个  Math.absExact
  也就是会抛错,而不是返回个错误的结果。  最后
  有位群友还说面百度的时候被问过。
  面试题是真的多,防不胜防,所以要抓清源头和本质,以不变应万变。
  转载自:https://mp.weixin.qq.com/s/HYM_lblCGYEwnuzM83Y2HQ
  原创:yes的练级攻略

王者荣耀战神夏侯惇重回巅峰,超神出装统治边路,一个盾6400血夏侯惇是王者荣耀之中非常强大的坦克英雄,他的最大特点就是韧性强,而且血量越低越难杀。有时明明看似残血,但是无论怎么打都不能快速将他打死,甚至还要被他反杀。最主要的原因就是因为夏侯惇王者荣耀甄姬之所以强,就是这件神装太好用,用的都是王者甄姬是王者荣耀之中很有特色的法师英雄,她的最大特点就是控制能力强,而且不怕对方人多。因为人越多,她的二技能打击力度越强,而且控制效果也会非常明显。最值得说的还是她的大招,如果运用得王者荣耀亚瑟重回巅峰,三刀送后羿归月,一套技能秒杀典韦!亚瑟在王者荣耀之中是一个非常优秀的英雄,虽然他是天美免费送的,但战斗力丝毫不比任何一个英雄差。有的朋友可能认为亚瑟不过就是个坦克,根本就没有什么战斗力,其实你是不懂他技能的强大之处老夫子的超神玩法,排位90胜率,逆风局也能反败为胜!老夫子是王者荣耀之中非常强势的战士英雄,他有很强的单挑能力,哪怕是遇到典韦,在同等经济的状态之下,也可以完全将对方碾压。因为老夫子的所有技能都对他有很强的克制作用。首先老夫子的二技亚瑟无敌出装,速度比关羽还要快,一剑能劈2000血!亚瑟是王者荣耀之中非常经典的一个英雄,别看他被定位为坦克,但是要论输出能力不比任何一个战士要弱。最主要是他的技能攻击爆炸,而且突进性还强,只要运用得当,甚至比刺客秒杀能力还强。当然王者荣耀鲁班80胜率出装,可反杀阿轲,吊打猴子!鲁班是王者荣耀之中非常强势的射手英雄,他的最大特点就是被动机枪扫射非常强大强大。暴发之后可以打出三段攻击,每一段都能敌方英雄造成最大生命值百分之五的物理伤害。而且他的被动攻击还不是王者荣耀S13吕布最强出装,单挑吊打典韦,三刀斩杀万血程咬金吕布是王者荣耀之中非常强势的英雄,虽然他被拉入坦克的行列,但是要论输出能力就算是一些强力的刺客也无法与他相比。常玩吕布的朋友都知道,吕布最大的特点就是有超强的真实伤害,而且他的真实王者荣耀S14程咬金最新出装,打不到追不上,排位死一次都难程咬金是王者荣耀之中非常强大的坦克英雄,他的最大优势就是大招回血能力超强,四级就有非常强大的战力。而且最让人讨厌的是,程咬金还有位移技能,这一点是最让人难以接受的。本来他就很难杀,庄周无敌出装,能在千军万马中取敌人头,排位80上分!庄周是王者荣耀之中非常特殊的一个英雄,最主要一点就是他可以免疫控制,而且又肉又有输出。尤其是他的大招,可以起到关键性的作用,有时会有意想不到的效果。不知道别人玩庄周是什么样,反正我王者荣耀大后期谁是最强战士?铠皇见底垫底,他三刀秒杀程咬金在王者荣耀之中有很多攻击力强大的战士英雄,尤其是到了大后期,几乎就是一套秒人,哪怕是万血肉盾在他们面前都承受不住。像是铠就是最为明显的一个,虽然说铠被定位为坦克,但是他的身上根本就王者荣耀国服程咬金教你最强出装,上王者其实很简单!程咬金是王者荣耀之中非常强势的坦克英雄,他的最大特点就是生存能力强,回血量非常惊人,哪怕是在残血的状态,也可以一个大招就将自己的血量加满。当然,程咬金要想有这样的能力也是和他的出装
英雄攻略分享(二)典(疯)韦(狗)篇序这是一个全新的系列,主要讲每个英雄的出装铭文打法等等。之前的上分分享讲的更多的是整天的意识节奏方面,现在新开一个系列详细讲各个英雄,主要还是以你们问的多的找我打的多的热门的人气英王者荣耀KPL限时体验开启,云中英雄团曝光!还有两个神秘背影大家好,我是七七。距离S26赛季还有9天,王者终于从指缝里漏出一点云中赛年的消息。这种图中共有五个角色,最右边拿着箭弓,扎着高马尾的女英雄,很显然就是伽罗。毕竟早在年的CG中,就讲消费者不是韭菜,大数据得讲规矩来源光明日报近日,国家网信办等四部门联合发布了互联网信息服务算法推荐管理规定。根据规定,算法推荐服务提供者应当向用户提供不针对其个人特征的选项,或者向用户提供便捷的关闭算法推荐服务邮储银行IT技能竞赛和数据建模大赛放榜安徽分行揽获九个奖项来源人民网安徽频道近日,中国邮政储蓄银行第一届IT技能竞赛和第二届数据建模大赛正式收官。邮储银行安徽省分行代表队最终斩获9个奖项,其中团体奖项5个个人奖项4个。邮储银行第一届IT技新能源重卡销量猛增668!新能源商用车驶入发展快车道新能源重卡市场正越来越火热。数据显示,2021年11月,国内新能源重卡累计销售1852辆,销量同比大涨668,已经连续3个月站上千辆销售大关,月销量纪录再度被刷新。纵观全年数据,截王者荣耀雅典娜新皮肤特效曝光,全新免费史诗皮肤下周上线王者荣耀正式服即将开启S26赛季,同时也将结束不夜长安赛年,进入到千色云中赛年。在这个新赛年中,正式服会上线一款全新赛年皮肤,且该皮肤已经官宣为雅典娜的黎明之约,预计将在1月初上线S26一月上线新限定皮肤特效曝光,传奇王者成新赛季最大看点不知不觉间,2021已经走到了尾声,在这一年时间里,王者荣耀更新了四个赛季(S22至S25,而随着2022年的逐渐逼近,有关S26赛季的相关讯息也随之来到了玩家们的面前,那么话不多何小鹏44岁身价570亿,3个月登顶造车新势力销冠,卖一辆车亏6万自2014年成立的小鹏汽车,虽然发展至今也就只有8年的时间,但其实力却不容忽视,是蔚小理中发展速度最快的一家汽车企业,更是连续三个月登顶造车新势力销冠,那其具体成绩又是怎样的呢?小王者荣耀李白越来越强势,有什么英雄能克制他?拿东皇就错了哈喽大家好,我是铃铛儿相信大家对于李白这个英雄都不陌生,最近的李白可以说风头正旺。大家都知道国服李白两个账号都登顶了巅峰赛第一和第一,并且保持了一段时间,从而刷新了大家对于李白的认王者荣耀都知道吕布出肉越多,胜率也就越高,为什么都纯输出了哈喽大家好,我是铃铛儿关于吕布这个英雄,铃铛儿也是比较熟悉的,几乎每个赛季都会玩,也曾拿吕布打到过巅峰赛前五千,也早就已经过万战力,但是关于吕布这个英雄,说实话近几个赛季的出装变动王者荣耀浪队发生内讧,天雨携号直接跑路,发帖斥责世予子太恶心文游小妤提到王者荣耀最近热火的路人王战队,大家绝对会脱口而出神鸡营,这支由土鸡主播吕德华组建的战队,可谓是汇聚了不少路人王玩家,不过对于吕德华的个人硬实力,大多数粉丝的确难以认可。