原码,反码,补码

这篇具有很好参考价值的文章主要介绍了原码,反码,补码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        原码、反码和补码是计算机中表示有符号整数的三种不同的二进制表示形式。它们的理解和原理涉及了计算机内部整数表示的数学概念和编码规则。

十进制数 原码 反码 补码
+5 00000101 00000101 00000101
+4 00000100 00000100 00000100
+3 00000011 00000011 00000011
+2 00000010 00000010 00000010
+1 00000001 00000001 00000001
+0 00000000 00000000 00000000
-0 10000000 11111111 00000000
-1 10000001 11111110 11111111
-2 10000010 11111101 11111110
-3 10000011 11111100 11111101
-4 10000100 11111011 11111100
-5 10000101 11111010 11111011

        对于正数,原码、反码和补码都是相同的。但是对于负数,反码是将对应正数的二进制位按位取反得到的,而补码是在反码的基础上再加1。补码的最高位为1,表示负数。

一、原码 :

原码是最直观的整数表示形式。在原码中,一个数用二进制表示,其中最高位表示符号位,0表示正数,1表示负数,其余位表示数值的绝对值。例如,对于一个n位的二进制数,最高位是符号位,剩下的n-1位用来表示数值。

例如,+5的4位原码表示是:0101,-5的4位原码表示是:1101。

原码的优点是简单直观,易于理解。但它有两个问题:存在两个零(正零和负零)以及在进行加法和减法运算时需要额外处理符号位,使得运算过程较为繁琐。

二、反码:

当-2+1时,用原码计算:

  10000010 (-2) 
+ 00000001 (+1)
  -----------
  10000011 (-3)

预期是-1,结果是-3

在原码表示中,最高位是符号位,为1表示负数。当进行加法运算时,如果最高位产生了进位,就会导致溢出。在这个例子中,加法过程中最高位产生了进位,导致结果的最高位为1,表示负数。而实际上,正确的结果应该是 -1,而不是 -3。

为了解决这个问题,人们引入了反码表示形式。在反码中,负数的表示是将其对应正数的二进制位按位取反,即0变为1,1变为0。正数的表示和原码相同。

例如,+5的4位原码表示是:0101,+5的4位反码表示是:0101,

            -5的4位原码表示是:1101,-5的4位反码表示是:1010。

这时候当-2+1时,用反码计算:

  11111101 (-2)
+ 00000001 (+1)
  -----------
  11111110 (-1)

预期是-1,结果是-1

三、补码 :

零的表示不唯一,原码中,零有两个表示,+0和-0,这增加了零的处理复杂性。

为了解决这个问题,并简化计算机内部的加法和减法运算,补码表示形式被广泛采用。在补码中,正数的表示与原码相同,而负数的表示是通过对其对应正数的反码加1来得到。补码解决了两个零的问题,并且负数的表示是唯一的。

补码的关键性质是:负数的补码加上该数的补码(加1)等于0,即 N + (-N) = 0。这是因为在补码的表示下,数值范围是有限的,超出范围的数将溢出。

例如,+5的4位反码表示是:0101,-5的4位反码表示是:1010,

            +5的4位补码表示是:0101,-5的4位补码表示是:1011。

-2 + 3 = ?文章来源地址https://www.toymoban.com/news/detail-610847.html

  11111110 (-2)  
+ 00000011 (+3) 
  ----------- 
  00000001 (+1)

到了这里,关于原码,反码,补码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++知识精讲13 | 原码、反码和补码

    ------------------------------------------------------------------------------------------------------------------------- 观看视频ing......  12岁的少年编程者告诉你编程如此简单  ------------------------------------------------------------------------------------------------------------------------- ---------------------------------------

    2024年02月16日
    浏览(36)
  • List 3.5 详解原码、反码、补码

    本博客文章已收录至我的Java SE专栏,如需阅读其他有关博客笔记请转至该专栏下 传送门 --Java SE_程序员雨空集 目录  前言 原码 原码的示例 原码的弊端 反码 反码的示例 反码的弊端 补码 补码的示例 补码的小细节 总结 原码:十进制数据的二进制表现形式,最左边是符号位,

    2024年02月08日
    浏览(95)
  • 【007】C++数据类型之原码、补码、反码

    💡 作者简介:专注于C/C++高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。包括C/C++、Linux、MySQL、Redis、TCP/IP、协程、网络编程等。 👉 🎖️ CSDN实力新星,社区专家博主 👉 🔔 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、

    2024年02月05日
    浏览(32)
  • 补码的反码加1为什么是原码?

    搞了半个小时,终于弄懂了。 16 8 4 2 1 原码 1 0 0 1 1 反码 0 1 1 0 0 补码 0 1 1 0 1 学到这里了,我们肯定知道,原码+补码 = 0,在这里也就是 = 19 + 13 = 32,溢出来的一位正好舍去了; 所以说,对啊,只要保证原码+补码 = 32(以此类推)不就好了吗! 所以,补码是 通过原码 这样得

    2024年02月10日
    浏览(32)
  • verilog学习笔记5——进制和码制、原码/反码/补码

    2023.8.13 天气晴 整数:除以2,余数倒着写 小数:乘以2,正着写 例题1 : 例题2 : 十进制数13.613转化为二进制数,要求误差小于1% 乘以2的次方 乘法 :被乘数左移,后相加 除法 :除数右移,被除数/余数去减去除数 8位二进制数的范围: 有符号数 无符号数 -128~127 0~255 原码 反

    2024年02月13日
    浏览(42)
  • 位运算(按位与、按位或、异或、取反)以及原码、反码、补码

    目录 位运算 按位与运算符 [ ] 按位或运算符 [ | ] 异或运算符 [ ^ ] 取反运算符 [ ~ ] 移位操作 一些面试常考的位操作运算 获取二进制中最右边的1 计算机原码、反码、补码 机器数 “三码”之间的转换 计算机中为啥要用补码呢? 真数 原码 反码 补码 有了原码为什么要使用反码

    2024年02月02日
    浏览(48)
  • 【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换

    欢迎大家来到c语言知识小课堂,今天的知识点是操作符和进制 同样都是数字1111,不同进制下数字的大小不同,第二行代表的是其各位数字十进制下的大小,将各位数字的十进制大小相加即1111在这个进制下转化为十进制的大小,从图中我们可以看出来 进制的定义:从右往左

    2024年02月22日
    浏览(49)
  • 爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)

    🚀 作者:阿辉不一般 🚀 你说呢: 生活本来沉闷,但跑起来就有风 🚀 专栏:爱上C语言 🚀 作图工具:draw.io ( 免费开源的作图网站) 如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持博主,如有不足还请指点,博主及时改正,感谢大家支持!!! 大家好啊😉!今

    2024年02月05日
    浏览(52)
  • 关于二进制的原码、补码和反码,以及表示范围、常见位运算符和进制转换的理解与简述

    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/17963363 出自【进步*于辰的博客】 参考笔记一,P3.13、P5.1;笔记三,P43.1/3、P44.1。 注:我暂且没有整理关于二进制、原码、补码和反码等概念的理论,本文中的阐述都基于

    2024年02月02日
    浏览(46)
  • 【C语言趣味教程】(2) 整数类型:数据类型的概念 | 原码反码与补码 | 有符号型和无符类型 | 研究 signed char 与 unsigned char 的取值范围

      🔗 《C语言趣味教程》👈  猛戳订阅!!! 在讲解数据类型前,我们不得不先讲解一些必备的知识点,比如如何定义一个变量,数据类型的基本概念。并介绍 ASCII 码,为 char 类型的讲解做必要的铺垫。然后讲解原码反码和补码,讲解 IEEE754标准时需要这部分的知识作为基

    2024年02月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包