计算机原码、补码和反码

计算机原码、补码和反码http supermaster blog 51cto com 看到这个标题 很多人有话要说了 切 这个东西每一本计算机基础知识的书中都有介绍的 你还拿出来 Show 什么嘛 我的原则是你需要就来看一看 懂就不要去理会 倒也不必讽刺两句 我相信总有需要它的人 当初我看书是没看明白的 在网上查了好多资料才有所悟 前几天跟老婆讲原码 反码和补码的知识 老婆似懂非懂 在这里我发表一下我个人的意见 浅显的把我所理解的原码 反码和补码的知识总结一下 一来可以给不懂的人来点启示 二来也可以

http://supermaster.blog.51cto.com//

      首先定义0在计算机中储存为00000000,对于正数我们依然可以像无符号数那样换算,从00000001到0依次表示1到127。那么这些数对应的二进制码就是这些数的原码。到这里很多人就会想,那负数是不是从到依次表示-1到-127,那你发现没有,如果这样的话那么一共就只有255个数了,因为的情况没有考虑在内。

      实际上,在计算机中表示最小的负整数,就是这里的-128,而且实际上并不是从到依次表示-1到-127,而是刚好相反的,从依次表示-127-1

     负整数在计算机中是以补码形式储存的,补码是怎么样表示的呢,这里还要引入另一个概念——反码,所谓反码就是把负数的原码除符号位(负数的原码除符号位和它的绝对值所对应的原码相同,简单的说就是绝对值相同的数原码相同)各个位按位取反,是1就换成0,是0就换成1,如-1的原码是0000001(注意这里只有7位,不看符号位,我这里所说的负数符号位都是1),和1的原码相同,那么-1的反码就是(这也是7位,后面加上了符号位都是8位了),而补码就是在反码的基础上加1,即-1的补码是+1=,因此我们可以算出-1在计算机中是按储存的。总结一下,计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0,正数的原码、补码可以特殊理解为相同,负数的补码是它的反码加1。下面再多举几个例子,来帮助大家理解!

//— 2008年6月23日补充:
很久没有来这里了,如果不是看到有人给我私人留言被转发到我以前的老邮箱去了,我可能还不知道什么时候才发现那个“-1的反码就是”的问题,看了N多批评后,觉得实在对不起各位,我已经在上面更正了,改成了7位,其实当时也是这么想的,为什么我要把符号位单独拿出来先不考虑,因为。。 -128。。呵呵,自己想想为什么吧。。这个帖子好像改过几次了吧,而且当时是边想边写,如果有语言组织好的(我看到很多大学生来到了这里),归纳一下吧,只希望也和我一样,就像对一个完全不懂的人讲解,因为我深知很多想学技术通常就是被拦在了最初的门槛,其实起步了后面都不是大事,谢谢了,也算是为后来人服务吧。
//—

十进制 → 二进制  (怎么算?要是不知道看计算机基础的书去)
47   → 

有符号的整数    原码    反码    补码
  47      00  00  00(正数补码和原码、反码相同,不能从字面理解)
 -47          (负数补码是在反码上加1)

再举个例子,学C语言的同学应该做过这道题:
把-1以无符号的类型输出,得什么结果?(程序如下)

#include
void main()
{

 short int n=-1;
 cout<<(unsigned short int)n<
}




  首先在我的电脑中short int类型的储存空间是2个字节,你的可能不同,我说过,这取决于你的计算机配置。它能储存28*2=65536个不同的数据信息,如果是无符号那么它的范围是0~65535(0~216-1),如果是有符号,那么它的范围是-32768~32767(-215~215-1)。这道题目中,开始n是一个有符号的短整型变量,我们给它赋值为-1,根据我们前面所说的,它在计算机中是以补码 储存的,注意前面说了是2个字节。如果把它强制为无符号的短整型输出的话,那么我们就把刚才的二进制把看成无符号的整型在计算机中储存的形式,对待无符号的整型就没有什么原码、反码和补码的概念了,直接把 转化成十进制就是65535,其实我们一看都是一就知道它是范围中最大的一个数了。呵呵,就这么简单。你个把上面的源代码编译运行看看,如果你的电脑short int也是两个字节,那就会和我得一样的结果。你可以先用这个语句看看:cout<<< FONT>看看你的电脑里的短整型占多少的储存空间,也可以用sizeof来看其它任何类型所分配的储存空间。

  最后提醒一句,关于数据如何在计算机中储存的,这里只适用于整型的数据,对于浮点型的是另一种方式,这里我们暂时就不深究了。本文出自 51CTO.COM技术博客



















版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177519.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:19
下一篇 2026年3月26日 下午7:20


相关推荐

  • Ubuntu如何开启root账户登录

    Ubuntu如何开启root账户登录Ubuntu 默认是没有开启 root 账户登录选项的 想要在启动系统时用 root 账户登录系统 需要自己进行额外的设置 STEP1 首先设置 root 账户的密码 sudopasswdro 执行命令后 首先输入当前账户密码 确认无误后 系统会提示 EnternewUNIX 这是 root 密码 自行设置 注意在 Ubuntu 的命令行中 输入的密码是不可见的 只需要输入之后回车即

    2026年3月20日
    1
  • JS中的原型和原型链(图解)

    JS中的原型和原型链(图解)JS 中的原型和原型链讲原型的时候 我们应该先要记住以下几个要点 这几个要点是理解原型的关键 1 所有的引用类型 数组 函数 对象 可以自由扩展属性 除 null 以外 2 所有的引用类型都有一个 proto 属性 也叫隐式原型 它是一个普通的对象 3 所有的函数都有一个 prototype 属性 这也叫显式原型 它也是一个普通的对象

    2026年3月26日
    2
  • Harbor私有仓库中如何彻底删除镜像释放存储空间?

    Harbor私有仓库中如何彻底删除镜像释放存储空间?

    2021年6月3日
    195
  • 服务器的系统和NAS有啥区别,nas和云服务器区别「建议收藏」

    服务器的系统和NAS有啥区别,nas和云服务器区别「建议收藏」nas和云服务器区别内容精选换一换没有区别。创建整机镜像有三种方式:使用云服务器创建、使用云服务器备份创建,以及使用云备份创建。使用备份创建镜像与使用云服务器创建镜像原理一样。云服务器创建镜像时,先为云服务器创建备份,再通过备份创建镜像,中间过程为系统自动完成的。所以二者没有区别。云耀云服务器与弹性云服务器的主要区别:云耀云服务器:云耀云服务器是可以快速搭建简单应用的新一代云服务器,云耀云服务器…

    2022年6月30日
    23
  • Pytorch cuda上的tensor转numpy[通俗易懂]

    Pytorch cuda上的tensor转numpy[通俗易懂]#model_out为CUDA上的tensormodel_out=model_out.cpu()#detach():去除梯度model_out=model_out.detach().numpy()

    2022年10月19日
    3
  • 纯C语言编程实现数独解法

    纯C语言编程实现数独解法编程解决数独问题 网上查了很多资料 大多数的 C 语言程序虽然可以运行出结果 但是往往定义了很多全局数组变量来存储待解决数独中每一个空的状态信息 如 通过扫描整个数独表 记录待填的空的位置 记录每个待填空所在行和列已经有哪些值 接下来可以填哪些值等信息 这导致代码中全局变量很多 全局变量在整个程序中到处调用 在没有足够注释的情况下整个程序可读性不高 代码结构不是很清楚

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号