博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不要在纠结负数的表示了
阅读量:5142 次
发布时间:2019-06-13

本文共 640 字,大约阅读时间需要 2 分钟。

 计算机数背景

  重要的事情说3遍: -2^31也就是int32的最小值 存储用的是 -0的补码 也就是 : 1000 0000 0000 0000 0000 0000 0000 0000

  为了解决原码做减法的问题, 出现了反码,但是又出现了 ‘-0’的问题。

  eg:1 - 1 = 1 + (-1) = [0000 0001] + [1000 0001]= [0000 0001] + [1111 1110] = [1111 1111] = [1000 0000]= -0

  因为补码的出现解决了-0的问题,而且多出来的1000 0000可以用来表示 -128。 很nice。

  真值:-128

  机器码(补码):1000 0000(1Byte)

  我们都知道负数在计算机中都是用补码存储的!如果计算真值(当然符号位是1也就是负数的真值)一般流程都是:符号位不管,然后其他位按位取反(求反码) + 1(得真值)。

那么机器码计算出来的也是 -128(补) = 1000 0000 = 1111 1111(反) + 1 = 0000 0000(原) = 0(真值)! 错!因为-128是用的-0的补码(1000 0000)来固定表示的,所以不能用这个方法来计算其补码和原码(-128就没有补码和源码,这句话是说的!)

  注意判断符号位 前面都是1。

转载于:https://www.cnblogs.com/luntai/p/5928060.html

你可能感兴趣的文章
java SE :标准输入/输出
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
tmux的简单快捷键
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
移动开发平台-应用之星app制作教程
查看>>
DataGridView的行的字体颜色变化
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
【题解】青蛙的约会
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
安装 Express
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
leetcode-Sort List
查看>>
中文词频统计
查看>>
Postman-----如何导入和导出
查看>>
【Linux】ping命令详解
查看>>