精华内容
下载资源
问答
  • 程序员原码/反码/补码在线计算器

    千次阅读 2020-08-15 16:04:44
    在线计算给定整数的原码/反码/补码,需要注意选择8、16位、32位数据,因为他们差别很大! 工具链接:http://www.atoolbox.net/Tool.php?Id=952

    在线计算给定整数的原码/反码/补码,需要注意选择8、16位、32位数据,因为他们差别很大!

    工具链接:http://www.atoolbox.net/Tool.php?Id=952

     

    展开全文
  • 16进制(4位)到二进制原码反码、补码计算
  • 定点数机器码转换器。十进制输入示例:12345、0.12345、-12345、-0.12345;二进制输入示例:10101、0.10101、-10101、-0.10101,将定点数转换成机器码
  • 原码反码、补码计算

    千次阅读 2018-05-05 17:22:53
    原码 反码 补码于是人们开始探索 将符号位参与运算, 并且只保留加法的方法. 首先来看原码。计算十进制的表达式: 1-1=01 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2如果用原码表示, 让符号位...

    原码 反码 补码

    于是人们开始探索 将符号位参与运算, 并且只保留加法的方法. 首先来看原码。计算十进制的表达式: 1-1=0

    1 - 1 = 1 + (-1) = [00000001]+ [10000001]= [10000010]= -2

    如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.

    为了解决原码做减法的问题, 出现了反码。计算十进制的表达式:

    1-1=0

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

    发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在”0”这个特殊的数值上. 虽然人们理解上+0-0是一样的, 但是0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0.

    于是补码的出现, 解决了0的符号以及两个编码的问题:

    1-1 = 1 + (-1) 
    = [0000 0001]+ [1000 0001] 
    = [0000 0001]+ [1111 1111] 
    = [0000 0000]=[0000 0000]

    这样0[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:

    (-1) + (-127) = [1000 0001]+ [1111 1111] 
    = [1111 1111]+ [1000 0001] 
    = [1000 0000]

    -1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000]补 就是-128. 但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示.(-128的补码表示[1000 0000]补算出来的原码是[0000 0000], 这是不正确的)

    使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数. 这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].

    因为机器使用补码, 所以对于编程中常用到的32int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.

     

     

    为什么计算机中通常使用补码的形式来表示一个数?

    用补码来表示负数就可以将加减法统一成加法来运算,简化了运算的复杂程度。
    采用补码进行运算有两个好处,一个就是刚才所说的统一加减法;二就是可以让符号位作为数值直接参加运算而最后仍然可以得到正确的结果符号,符号位无需再单独处理。

     

    大数溢出问题

    int类型在32位系统中占4个字节、32bit,补码表示的的数据范围为:

    [10000000 00000000 00000000 00000000] ~ [01111111 11111111 11111111 11111111]

    [−231,231−1]

    [-2147483648, 2147483647]

    Java中表示为:

    [Integer.MIN_VALUE, Integer.MAX_VALUE]

    byte类型的表示一样,由于负数比正数多表示了一个数字。对下限去相反数后的数值会超过上限值,溢出到下限,因此下限的相反数与下限相等;对上限去相反数的数值为负值,该负值比下限的负值大1,在可以表示的范围内,因此上限的相反数是上限直接取负值。

    // 2147483647   [01111111 11111111 11111111 11111111]

    System.out.println(Integer.MAX_VALUE);      

     

    // -2147483648  [10000000 00000000 00000000 00000000]

    System.out.println(Integer.MIN_VALUE);

     

    // -2147483647      正常

    System.out.println(-Integer.MAX_VALUE);     

     

    // -2147483648  2147483648,超过上限,发生溢出

    System.out.println(-Integer.MIN_VALUE);     

     

    // true2147483648 发生溢出

    // 对下限去相反数后的数值会超过上限值,溢出到下限,因此下限的相反数与下限相等

    System.out.println((Integer.MIN_VALUE == -Integer.MIN_VALUE));  

     

     

    展开全文
  • 在讲述原码反码和补码时,有一个特殊的数值没有涉及到,那就是0,在我们平时使用中,0是没有正负之分的,但是不可否认+0 = -0,那么下面列举下+0,-0的原码反码与补码的形式: 十进制数 ...

    By: Ailson Jack
    Date: 2018.11.29
    个人博客:http://www.only2fire.com/
    本文在我博客的地址是:http://www.only2fire.com/archives/92.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。

    在计算机内部数值是以补码的方式进行存储的,采用补码进行数据存储当然有其优点,下面会一一介绍相关内容,让各位彻底弄懂原码、反码、补码的概念以及为什么采用补码作为数据存储的方式。

    注意:下面列举的例子均是指8位的字节数据。对于16位,32位的数据同样适用,只是为了书写方便,8位是最好的选择啦!

    1、无符号数与有符号数

    在介绍原码、反码和补码的概念之前,先来了解下无符号数和有符号数。

    在计算机系统中,我们可以将数分为两类:无符号数和有符号数。无符号数的意思是我们不关心这些数的符号,因此也就无所谓正负,反正它们就是数而已,就像小学生一样,眼中只有自然数。在8位的字节运算中,无符号数的范围是0000_0000B~1111_1111B,即十进制的0~255。

    有符号数是分正负的,而且规定,数的正负要通过它的最高位来辨别。如果最高位是0,它就是正数;如果是1,就是负数。这样一来,在8位的字节运算环境中,正数的范围是0000_0000B~0111_1111B,即十进制的0~127;负数的范围是1000_0000B~1111_1111B,即10进制的-128~-1。也就是说8位的数据,有符号数的范围是-128~127(对这里的负数有疑问的可以往下面看)。

    2、原码、反码与补码

    原码:最高位表示符号位,其余位代表数值大小。如果最高位是0,它就是正数;如果最高位是1,就是负数。例如:十进制数+2,其二进制形式为:0000_0010B;如果是-2,就是1000_0010B。因为最高位是符号位,所以原码二进制的形式值不等于真正的数值。例如上面的有符号数1000_0010B,其最高位1代表负数,表示的数值为-2,而不是形式值130(1000_0010B转换成无符号十进制等于130)。

    反码:正数的反码是其本身;负数的反码是在原码的基础上,符号位不变,其余各数值位取反。

    补码:正数的补码是其本身;负数的补码是在其原码的基础上,符号位不变,其余各数值位取反,最后+1(即负数的补码是其反码+1)。

    下面列举几个8位二进制数的原码、反码和补码的编码形式:

    十进制数

    原码

    反码

    补码

    42

    0010 1010

    0010 1010

    0010 1010

    -42

    1010 1010

    1101 0101

    1101 0110

    127

    0111 1111

    0111 1111

    0111 1111

    -127

    1111 1111

    1000 0000

    1000 0001

    3、补码存储数据的优点

    在讲述原码、反码和补码时,有一个特殊的数值没有涉及到,那就是0,在我们平时使用中,0是没有正负之分的,但是不可否认+0 = -0,那么下面列举下+0,-0的原码、反码与补码的形式:

    十进制数

    原码

    反码

    补码

    +0

    0000 0000

    0000 0000

    0000 0000

    -0

    1000 0000

    1111 1111

    0000 0000

    为什么-0的反码1111_1111B进行加1操作求取到的-0补码是0000_0000B。因为这里假定数据宽度是8位的,1111_1111B加1之后,会逐个向上进位,我们假定有第9位,且值为0,那么0_1111_1111B加1之后,就变成了1_0000_0000B,但是实际上我们要的数据是8位的宽度,这里舍弃第9位,最后结果就变成了0000_0000B。

    好了,在讲述补码的优点之前,先看看计算机为什么不使用原码作为数的存储格式而采用补码作为数的存储格式。

    下面说说原码的优缺点吧。

    原码的优点当然是简单直观,例如+2的原码为:0000_0010B,-2的原码为:1000_0010B。

    原码的缺点也显而易见:

    (1)、+0与-0在原码中竟然有两个二进制形式,与我们熟知的+0=-0貌似有出入。

    (2)、原码不能直接参加运算,可能会出错。例如:1+(-1)=0,而用原码的二进制形式进行运算为:0000_0001B + 1000_0001B = 1000_0010B,换算成十进制为-2,显然计算结果错误。

    那么计算机为什么要使用补码呢?

    首先,根据运算法则减去一个正数等于加上一个负数,即: 1-1 = 1+(-1),所以计算机被设计成只有加法而没有减法,而让计算机辨别”符号位”会让计算机的基础电路设计变得十分复杂,于是就让符号位也参与运算,从而产生了反码。

    用反码计算,出现了”0”这个特殊的数值,0带符号是没有任何意义的。而且会有0000_0000B和1000_0000B两个原码编码表示0。于是设计了补码,负数的补码就是反码+1,正数的补码就是正数本身,从而解决了0的符号以及两个编码的问题:用0000_0000B表示0,用1000_0000B表示-128。

    注意:-128并没有原码和反码。使用补码,不仅仅修复了0的符号以及存在两个编码的问题,而且还能够多表示一个最低数值。

    如果还不清楚-128怎么来的,那么我就来按我的想法来推出来吧,-127的原码为:1111_1111B,则其反码为:1000_0000B,补码为:1000_0001B,那么自然我们可以想想补码为1000_0000B代表的就是-128=-127-1=1000_0001B - 1= 1000_0000B。这也就是8位数据最小的负整数了。

    这就是为什么8位二进制,使用补码表示的范围为[-128,127]

    补码存储数据的优点:

    (1)、避免了0的编码有两个;

    (2)、符号位和有效值位可以一起处理,减法通过加法就可以实现,即简化了计算机的结构设计也提高了运算速度。

    补码存储数据的缺点:

             (1)、不够简单直观。当然这里的不够简单直观是对我们来说的。计算机倒没什么。

    下面给大家推荐一个计算补码的小工具,那就是我们经常使用的Windows计算器,只要选择好相应的数据宽度,输入你的数值,就可以观察到对应的二进制形式了:

             好了,讲了这么多,相信大家对原码、反码和补码都有一定的认识了,如果还有什么疑问,欢迎留言交流。

    排版更好的内容见我博客的地址:http://www.only2fire.com/archives/92.html
    注:转载请注明出处,谢谢!^_^

    展开全文
  • PS:正数的原、反、补码都一样:0的原码反码都有两个,因为这里0被分为+0和-0。 反码: 知道了什么是原码,那反码就更是张飞吃豆芽——小菜一碟了。知道了原码,那么你只需要具备区分0跟1的能力就可以轻松求出反码...

    原码:

    如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1。剩下的n-1位表示概数的绝对值。

    例如: X=+101011 , [X]原= 00101011 X=-101011 , [X]原= 10101011

    位数不够的用0补全。

    PS:正数的原、反、补码都一样:0的原码跟反码都有两个,因为这里0被分为+0和-0。

    反码:

    知道了什么是原码,那反码就更是张飞吃豆芽——小菜一碟了。知道了原码,那么你只需要具备区分0跟1的能力就可以轻松求出反码,为什么呢?因为反码就是在原码的基础上,符号位不变其他位按位取反(就是0变1,1变0)就可以了。

    例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100

    补码:

    补码也非常的简单就是在反码的基础上按照正常的加法运算加1。

    例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101

    PS:0的补码是唯一的,如果机器字长为8那么[0]补=00000000。

    移码:

    移码最简单了,不管正负数,只要将其补码的符号位取反即可。

    例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101,[X]移=01010101

    运算过程:原码->反码->补码->移码

    原码 :二进制(开头第一个表示符号0正1负)

    反码 :在原码的基础上,符号位不动,其他位取反 —注意,任何正数的源码=反码=补码,而负数都是通过补码表示的。

    补码 :在反码的基础上,运算+1 —注意,任何正数的源码=反码=补码,而负数都是通过补码表示的。

      公式:两数补码的和==两数和的补码。
    

    移码 :在补码的基础上,符号位取反

    101011(二进制)–> 原码 00101011 --> 反码 01010100 --> 补码 01010101–> 移码 11010101

    知道了计算方式后,我们应该研究一下源码、反码、补码的作用是什么?

    1 首先看源码

    问:什么是源码?

    答:数字的二进制形式(二进制的数)

    问:为什么要用源码?

    答:我是从2个方面看 1 从目前计算机的构造来看它只认识1/0,所以任何指令、数字、都会翻译成一个二进制数传递给计算机。

                 2 规范和统一计算机的“交流语言”,统一对外的接口。
    

    总结:源码是计算机唯一认识的语言结构。

    2 反码和补码

    问:反码是什么?

    答:在源码的基础上符号位不动,其他取反

    问:为什么要用反码?

    答:这个问题需要配合补码一起查看,因为补码=反码+1 所以一般的计算顺序为 源码–>反码–>补码

    *问:补码是什么?

    答: 补码=反码+1(符号位参与运算)

    问:为什么要用补码?

    答:为了进行做加减运算,因为计算机只有加法计算器,所以a-b的处理方式为a+(-b),而这过程中如果直接用源码进行计算会出现问题

    例1 10+(-10)= 0 (当使用源码进行计算减法)

    10(十进制) – 00001010(源码)

    -10(十进制) – 10001010 (源码)

    00001010+

    10001010


    1XXXXXXX ----->首先看到第一位是负数,显然不是我们想要的结果

    例子2 10-11 (试试用减法直接做计算吧)

    10(十进制) – 00001010(源码)

    -11(十进制) – 10001011(源码)

    00001010-

    10001011


    xxxxx11111----->可以看到貌似跟答案-1(十进制)差距还是比较明显的

    现在我们尝试应用补码进行计算

    例子3 10+(-10)=0 (使用补码)

    10(十进制) — 00001010(源码)----同源码(反码)----同源码(补码)

    -10(十进制) — 10001010(源码)----11110101(反码)----11110110(补码)

    00001010+ 10的源码----注意正数用补码(值等同于源码)

    11110110 -10的补码----注意负数用补码


    00000000 得到了0的补码

    例子3 10-11 (使用补码)

    10(十进制) — 00001010(源码)----同源码(反码)----同源码(补码)

    -11(十进制) — 10001011(源码)----11110100(反码)----11110101(补码)

    00001010+ 10的补码

    11110101 -11的补码


    11111111— 得到了-1的反码

    从这4个例子可以看出反码和补码使用的作用了,用于为二进制负数做运算时的一种转换。

    再次总结运算过程

    数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为 127~(-127)

    运算过程:原码->反码->补码->移码

    原码 :二进制(开头第一个表示符号0正1负)

    反码 :在原码的基础上,符号位不动,其他位取反 —注意,任何正数的源码=反码=补码,而负数都是通过补码表示的。

    补码 :在反码的基础上,运算+1 —注意,任何正数的源码=反码=补码,而负数都是通过补码表示的。

      公式:两数补码的和==两数和的补码。
    

    移码 :在补码的基础上,符号位取反

    展开全文
  • 二进制(原码反码、补码)

    万次阅读 多人点赞 2018-11-09 09:01:23
     因为“正数的原码反码、补码都一样”,所以,1的补码 = 1的原码,所以 1的补码+ 1的补码 就等于:  00000000 00000000 00000000 00000001  +  00000000 00000000 00000000 00000001  = ...
  • 原码 反码 补码

    2020-12-15 13:59:02
    以一个byte为例 正数:原码 反码 补码三合一 1 原码 反码 补码: 0000 0001 负数:-1 原码: 1000 0001 反码:符号未不变,其他位取反:1111 1110 补码:反码+1:1111 1111 ...原码/反码/补码计算器 ...
  • 平时使用的计算器,它的负数都是已经以补码的形式转好了的, 由于正数的原码反码,补码都是一样的,所以看到的始终都是一样的二进制码! 不难看出,计算机科学家们引入了原码反码、补码的就是为了解决做减法的...
  • if(a>0) { //正数时,原码反码补码相等; value = a; int i; for(i=0;i;++i) { bitOri[i]=value/bitDiv[i]; value=value%bitDiv[i]; } memcpy(bitInv,bitOri,8); memcpy(bitPack,bitOri,8); } else { //负数时,...
  • 原码反码和补码详解

    千次阅读 2019-02-09 19:36:05
    关于反码原码,大家都是在郑重其事的讲解,其实,学过的人都知道,它们的重要性是 0 ! 做而论道把自己对于补码的认识写在下面,但愿对读者有些帮助。 加法器 计算机里面,只有加法器,没有减法器,所有的减法运算...
  • 16进制计算器

    2013-05-08 11:25:19
    16进制计算器,可以计算16进制,8进制,2进制
  • 负数的反码原码符号位不变,其他位取反 补码 00000000 10000000 00000101 11111011 01000000 11000000 正数的补码=反码=原码; 负数的补码是反码符号位...
  • 基础回顾-1 原码反码和补码

    千次阅读 2019-06-05 08:08:20
    存储器的最小单元是1个字节,即 当某个数据,转化为二进制数据时,当长度小于8位,计算器分配的仍旧是1字节的存储空间。 计算数 一个数在机器中的二进制表示形式,即为机器数。机器数最高位为符号位,正数为0,负数...
  • 数据在内存中是如何存在的呢? 我们不妨用VS2019的调试窗口来看一下下面的代码。 int main() { int a = 20; int b = -10;...计算机中的有符号数有三种表示方法,即原码反码和补码。有符号数分为正数和
  • 1、正数的二进制原码反码、补码都是相同的   2、负数的二进制原码:先计算该负数绝对值的二进制。之后对其每个数“取反”,然后加一。 比如-32 第一步:32(10)=00100000(2) 第二步:求反:11011111 第...
  • 原码,反码,补码,移位

    2017-02-06 18:29:00
    1.可以看到正数的原码 与 其反码补码相同 2.负数的原码最高位为1 3.负数的反码: 符号位不变,其余各位按位取反 4.负数的补码:在其反码的基础上+1 5. 负数是以其补码的方式存储在硬盘上的    6.左移操作()...
  • 原码/反码/补码在线计算器

    万次阅读 多人点赞 2020-06-25 20:02:48
    原码/反码/补码计算器,在线计算给定整数的原码/反码/补码。 工具链接:http://www.atoolbox.net/Tool.php?Id=952 原码, 反码和补码的概念 对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码...
  • 原码 补码 反码

    2013-01-21 23:40:35
    原码反码,补码是针对一个有符号数的不同表示方法。有些书上用的公式看的都头大,这里我总结一下。 原码反码,补码换算成有符号整数他们的值是一样的。 拿两个数来进行推算:7, -7 7的原码: 0 1 1 1 (第一...
  • 一、大学计算机入门开始讲起的原码反码补码你确定你懂了吗? 一、大学计算机入门开始讲起的原码反码补码你确定你懂了吗? 链接:https://blog.csdn.net/lllunaticer/article/details/84109011 1、两个事实 事实1:说...
  • 原码反码补码

    2018-11-15 19:21:51
    大学计算机入门开始讲起的原码反码补码你确定你懂了吗? 事实1:说起来你可能不信,计算机的中央处理器只会做加法(只有加法器),不会做减法。 因此提出反码补码概念是为了让计算器可以通过做加法器做减法 事实2...
  • 计算器原码反码和补码的一些基础知识: 来自百度百科的一些概念解释: 在计算机系统中,数值一律用补码来表示和存储; 原码一般是针对用户而言,补码是针对计算机的具体存储来使用。 转换关系: 1、正整数、负整数...
  • 计算机中原码反码、补码 正数的 原码 = 反码 = 补码 负数 反码 = 数的绝对值按位取反(最高位符号位除外)  补码 = 反码 +1 已知负数补码求原码 补码取反(最高位符号位不取反)+1 = 原码 最高位 符号位也要进位...
  • 十、二、八、十六进制间转换(包含负数间进制转换)原码、补码、反码定义 0.0、有符号的 1 字节表示范围。 ​ 我们知道 1字节 (byte) = 8 位(bit)(即8位二进制,如:11111111)、1024个字节 = 1 K 、1024 K = 1M ​...
  • 只有加法计算器没有减法器,为了将减法转换为加法设计了反码 但是反码有缺陷,正负相加的表示不唯一 补码:为了解决反码的问题,设计了高位溢出 eg: 45-19 53-27 65-34 -34-27 0010 1101 0011 0101 0100 0001 1101 ...
  • 原码反码③ 补码四、原理1、为什么原码不行?2、补码的原理补充:补数结论(在模确定的情况下) 一、数据概述 以C语言为例,里面所有的基本数据类型,都是以符合人类世界和自然世界的逻辑而出现的。比如说int,...
  • 本文转载自 蚂蚁辣舞 的CSDN 博客: ... 一、数据概述 以C语言为例,里面所有的...数值X的补码记作[x]补,如果机器字长为n,则最高位是符号位,0表示正号,1表示负号,正数的补码与原码反码都相同,负数的补码则等于...
  • 反码 :在原码的基础上,符号位不动,其他位取反 ---注意,任何正数的源码=反码=补码,而负数都是通过补码表示的。 补码 :在反码的基础上,运算+1 ---注意,任何正数的源码=反码=补码,而负数都是通过补码表示的。 ...
  • 位运算、原码反码补码概念、位运算常考算法题(异或技巧) 1.概述 位运算有6种,与、或、非、异或、左移、右移,左右移又分带符号位和不带符号位的左右移 位运算是直接在二进制层面0和1上操作的,所以它的操作效率...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 717
精华内容 286
关键字:

原码反码计算器