补码

负数为什么要用补码来表示?

▼魔方 西西 提交于 2020-02-16 00:13:32
负数为什么要用补码来表示? 今天,发生一件非常有趣的事情。 公司同事问了我一个问题:为什么 2.0 - 1.1 = 0.89999999 呢?不应该是 0.9吗? 原来是,他问了周围一圈的同事,都给他的是同一个回答,说这是精度问题。他百思不得其解,怎么就会产生精度问题呢。再问,就没人知道原因了。 然后,我就看到了他抱着一本厚厚的书在看。拿过来一看,是一本Java书,厚厚的六百多页,这还仅是第一卷。哟呵,这是准备大干一场啊。 看在他这么努力学习的份上,还有他那对知识极度渴望的眼神。我决定,把我毕生所学传授与他。 于是,就给他详细讲解了,计算机中是怎么存储一个数的,十进制是怎么在转二进制的过程中丢失精度的,以及浮点数是怎么遵循IEEE 754 规范的,在浮点数进行加减运算的过程中会经历对阶、移位运算等过程,以及在此过程中是怎么丢失精度的。(这些问题在之前的文章中都有解答,参看“为什么0.1+0.2=0.30000000000000004”) 然后,成功的把他彻底搞懵逼了。怎么这么难啊。 原来,他的计算机基础比我还匮乏,不知道什么是位运算,不知道什么是原码、反码和补码。 本着我的热心肠,我就给他普及了一下这些知识 ---- 负数的补码形式和位移运算。 我们知道,一个数分为有符号和无符号。对于,有符号的数来说,最高位代表符号位,即最高位1代表负数,0代表正数。 在计算机中,存储一个数的时候

你真的搞清位运算了么?以Java为例总结

≯℡__Kan透↙ 提交于 2020-02-16 00:05:43
二进制位运算是最贴近计算机真实运算操作,通过位运算,我们可以高效的完成各种基础运算(加减乘除取余等),我们还可以使用位运算巧妙的完成原本很复杂的工作,真正理解计算机,我们才能更好的使用计算机。我将通过基础理解开始,讲解到Java中的一些实际应用。本场Chat中,将学到一下内容 •对原码、反码、补码等基础进行重拾 •与或异或移位等正负数运算细节 •正负数位运算的操作 写在前面 二进制位运算是最贴近计算机真实运算操作,通过位运算,我们可以高效的完成各种基础运算(加减乘除取余等),我们还可以使用位运算巧妙的完成原本很复杂的工作,真正理解计算机,我们才能更好的使用计算机。在这一片文章,我将通过基础理解开始,讲解到 Java 中的一些实际应用。 机器数和机器数的真值 一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用机器数的最高位存放符号,正数为 0,负数为 1。举个例子,比如在机器字长为 8 位的情况下(机器字长是指计算机直接处理的二进制数据的位数,它决定了计算机的运算精度,一般是 8 的整数倍,8 位、16 位、32 位、64 位、128 位),十进制中的+3,转换成二进制就是 0000 0011,如果是-3,转换成二进制就是 1000 0011。转换的二进制数 0000 0011 和 1000 0011 就是机器数。 这里我们还需要知道的就是机器数的真值

原码,反码,补码

◇◆丶佛笑我妖孽 提交于 2020-02-14 19:16:07
原码,反码,补码 计算机里面只有加法,那减法怎么表示了,用加法来表示例如;5-3在计算机的表示为5 + (-3) 为什么要有源码,反码,补码这些东西,有源码就够了不是吗、 因为计算机最终的计算就是拿补码来计算的,从源码转为反码最后在转为补码才能计算出正确的结果 源码不方便计算,原因是第一位作为符号位了 比如 -4,就是 [10000100] 。因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 [10000100],其最高位1代表负,其真正数值是 -4 而不是形式值132([10000100]转换成十进制等于132) -4加了符号位直接计算的话就是132了这肯定是不对的,那怎么办呢这个时候想到了反码先把源码除了符号位之外其余取反就是反码作为中间步骤 然后符号位保持不变在反码的基础上加1就是补码,这个时候才能计算 正数 的源码,反码,补码都是一样的,第一位的符号位为0 负数的反码符号位第一位保持不变还是1,其余取反 负数的补码符号位第一位保持不变还是 1,然后在反码的基础上加1 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jason_M_Ho/article/details/78700434   数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念。

原码, 反码, 补码 详解

回眸只為那壹抹淺笑 提交于 2020-02-14 19:13:41
原文地址: https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。 那么,这里的 00000011 和 10000011 就是机器数。 2、真值 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。 例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 二. 原码, 反码, 补码的基础概念和计算方法. 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码,

原码,反码,补码

为君一笑 提交于 2020-02-14 03:50:23
反码、补码跟原码这几个概念: (1)数值数据的表示 我们把一个数在计算机内被表示的二进制形式称为机器数,该数称为这个机器数的真值。机器数有固定的位数,具体是多少位与机器有关,通常是8位或16位。机器数把真值的符号数字化,通常用最高位表示符号,0表示正,1表示负。例如,假设机器数为8位,最高位是符号位,那么在定点整数的情况下,00101110和10010011的真值分别为十进制数+46和-19。 (2)原码: 一个整数的原码是指:符号位用0或1表示,0表示正,1表示负,数值部分就是该整数的绝对值的二进制表示。 例如:假设机器数的位数是8,那么:[+17]原=00010001 [-39]原=10100111 值得注意的是,由于所以数0的原码不唯一,有“正零”和“负零”之分。 (3)反码 在反码的表示中,正数的表示方法与原码相同;负数的反码是把其原码除符号位以外的各位取反(即0变1,1变0)。通常,用[X]反表示X的反码。例如: [+45]反 = [+45]原 = 00101101 [-32]原 = 10100000 [-32]反 = 11011111 (4)补码 在补码的表示中,正数的表示方法与原码相同;负数的补码在其反码的最低有效位上加1。通常用[X]补表示X的补码。例如: [+14]补 = 10100100 [-36]反 = 11011011 [-36]补 = 11011100

原码、反码、补码的正(nao)确(can)打开方式

僤鯓⒐⒋嵵緔 提交于 2020-02-14 03:47:03
  我们知道日常生活中使用的数分为整数和实数,整数的小数点固定在数的最右边,可以省略不写,而实数的小数点则不固定。在计算机中只能识别和表示“0”和“1”,而无法识别小数点,因此要想使得计算机能够处理日常使用的数据,小数点的问题是不可避免的。   关于计算机系统中实数的表示,在下篇文章中会讲解。本篇博客我们讲解的是整数在计算机系统中如何表示。     在各种大学教材,各种网站论坛中,对于整数编码表示方法的正确打开姿势(姿势要帅)如下:    1、机器数   机器数(computer number)是数字在计算机中的二进制表示形式。机器数有2个特点:   ①、符号数字化。因为计算机硬件只认识两种物理状态(用0和1表示),因此数据的正负号在机器里就用一位二进制0或者1来区分。在计算机用一个数的最高位存放符号, 0代表符号“+”,以1代表符号“-”。   ②、机器数的大小受机器字长的限制。机器内部设备一次能表示的二进制位数叫机器的字长,一台机器的字长是固定的。字长8位叫一个字节(Byte),机器字长一般都是字节的整数倍,如字长8位、16位、32位、64位。   比如在字长为8的计算机中,十进制数+5,其机器数为00000101;十进制数-5,其机器数为10000101。 2、真值   计算机机器数真正的值称为真值。因为机器数的最高位是符号位,所以我们在计算真值的时候要分区分开。  

原码、补码、反码

走远了吗. 提交于 2020-02-13 23:03:41
反码、补码跟原码这几个概念: (1) 数值数据的表示 我 们把一个数在计算机内被表示的二进制形式称为机器数,该数称为这个机器数的真值。机器数有固定的位数,具体是多少位与机器有关,通常是 8位或16位。机器数把真值的符号数字化,通常用最高位表示符号,0表示正,1表示负。例如,假设机器数为8位,最高位是符号位,那么在定点整数的情况下,00101110和10010011的真值分别为十进制数+46和-19。 ( 2)原码: 一个整数的原码是指:符号位用 0或1表示,0表示正,1表示负,数值部分就是该整数的绝对值的二进制表示。 例如:假设机器数的位数是 8,那么:[+17]原=00010001 [-39]原=10100111 值得注意的是,由于 所以数 0的原码不唯一,有“正零”和“负零”之分。 (3 )反码 在反码的表示中,正数的表示方法与原码相同;负数的反码是把其原码除符号位以外的各位取反(即 0变1,1变0)。通常,用[X]反表示X的反码。例如: [+45]反 = [+45]原 = 00101101 [-32]原 = 10100000 [-32]反 = 11011111 (4 )补码 在补码的表示中,正数的表示方法与原码相同;负数的补码在其反码的最低有效位上加 1。通常用[X]补表示X的补码。例如: [+14]补 = 10100100 [-36]反 = 11011011 [-36]补

原码、反码、补码

删除回忆录丶 提交于 2020-02-13 16:42:41
 数值在计算机中是以补码的方式存储的; 在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念。 对于一个数, 计算机要使用一定的编码方式进行存储。 原码, 反码, 补码是计算机存储一个具体数字的编码方式。   一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。比如,十进制中的数 +2 ,计算机字长为8位,转换成二进制就是[00000010]。如果是 -2 ,就是 [10000010] 。因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 [10000010],其最高位1代表负,其真正数值是 -2 而不是形式值130([10000010]转换成十进制等于130)。所以将带符号位的机器数对应的真正数值称为机器数的真值。 原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。 反码:反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。 补码:补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。 一.原码 1>.正数的原码就是它的本身   假设使用一个字节存储整数,整数10的原码是:0000 1010 2>.负数用最高位是1表示负数  

原码、补码、反码

我只是一个虾纸丫 提交于 2020-02-13 10:51:25
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。 那么,这里的 00000011 和 10000011 就是机器数。 2、真值 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。 例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 二. 原码, 反码, 补码的基础概念和计算方法. 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式

原码、反码、补码知识详细讲解(转)

巧了我就是萌 提交于 2020-02-13 10:50:13
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。 那么,这里的 00000011 和 10000011 就是机器数。 2、真值 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。 例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 二. 原码, 反码, 补码的基础概念和计算方法. 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数,