计算机基础知识:原码、反码、补码

摘要:
可能很多人有这样的疑问,我们为什么要了解原码、反码、补码,它能帮助我们解决什么问题?我是这样认为的,其一,作为计算机基础知识,我们必须有所了解。在计算机中,负数是以其正值的补码形式表述的。这就需要我们搞清楚什么是原码、反码、补码,他们之间有什么暧昧的关系啦。

可能很多人有这样的疑问,我们为什么要了解原码、反码、补码,它能帮助我们解决什么问题?在编写代码中有什么实际用途呢?

我是这样认为的,其一,作为计算机基础知识,我们必须有所了解。其二、这些基础知识无论是普通的编写代码,还是研究高超的算法都离不开它。

例:我们常见的位运算 按位与(&)、按位或(|)、取反(~)等等。

在代码中, 我们可能经常会碰到这样的需求,要计算一个数是偶数或奇数,一般我们这样写 n % 2 取余,如果余0则为偶,否则为奇。

我们可以利用按位与(&)很巧妙的解决这问题,而且效率会更高,因为位运算是对内存数据进行操作,不需要转换成十进制,因此它的处理速度更快。

我们来判断整数n是奇是偶,可以运用表达示 n & 1,如 n = 5, n & 1返回值1; 如n=6,n&1返回值0;因为,在二进制里面,末位为0表示偶数,为1表示奇数,效果与n % 2 取余是一样的,但比它要快。

当然,除了这个,还有非常多的用途。

好啦,我们进入正题!

------------------------------------------------------------------------------------------------------------------------------------------------

我们知道,计算机中所有数据最终都是以二进制数表示。

相信大家也学过如何将一个十进制数转换为二进制数,如果觉得换算比较麻烦,可以用系统自带的计算器辅助换算。

我们也学过字节与位,1字节=8位,通常在Asp.net、Java等高级编程语言中int类型默认以32位(4字节)表示,当然你可以显示申明以16位或64位表示。现假设有int类型数,值为9,在计算机中以二进制方式表示如下:

--8位--

0000 1001

--16位--

0000 0000 0000 1001

--32位--

0000 0000 0000 0000 0000 0000 0000 1001

--64位--

00000000 0000 00000000 0000 0000 0000 00000000 0000 00000000 0000 0000 1001

通过以上可以看出,数值9转换成二进制是0000 1001,在16位、32位或64位中它们占位比较多,所以前面补0填充。

OK,这是数值9的二进制表述,那么如果是-9,它在计算中如何表述呢?

在计算机中,负数是以其正值的补码形式表述的。这就需要我们搞清楚什么是原码、反码、补码,他们之间有什么暧昧的关系啦。

原码:一个整数,按照绝对值换算成的二进制数,称为原码。(数的绝对值:正数和零的绝对值是它本身,负数的绝对值是它的相反数。总之,一个数的绝对值是非负数。)

如:数值-9的绝对值为9,数值9的二进制是 0000 1001,这就是-9的原码。

反码:在原码基础上按位取反,产生的新二进制数称为原二进制数的反码。简单理解就是:原为1的变成0,原为0的变成1.

如:数值-9的原码是 0000 1001。把它的每一位取反后为 1111 0110

补码:反码加1为补码。(补码=反码+1; 反码=原码取反; 原码=数值绝对值的二进数数)

如:数值-9的原码是 0000 1001。把它的每一位取反后为 1111 0110,计算补码=反码+1,也就是1111 0110 + 1 = 1111 0111

因此,数值-9在计算机中二进制表述为:1111 0111

我们再来一例:-15在计算机中如何表述:

1、原码,数值-15的绝对值15,它的二进制表述是 0000 1111

2、反码,原码基础上取反为: 1111 0000

3、补码,反码+1得补码, 1111 0001

所以-15在计算机里用二进制表述就是 1111 0001

免责声明:文章转载自《计算机基础知识:原码、反码、补码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Silverlight中的TabControl如何绑定数据?SAP 客户主数据维护说明下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转]TCP/IP 协议基础(一)

参考书籍为《图解tcp/ip》-第五版。这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述)、OSI参考模型、网络概念的本质、网络构建的设备等 下面是协议层从底层至顶层的一个模型图: 一、计算机网络的背景 1.1 计算机的发展 有人说:“20世纪最伟大的发明就是计算机”,自诞生伊始,计算机经历了一系列发展,从...

mac 添加安卓设备的支持

1. 把android设备插到mac电脑上 2. 首先可以看一下之前在该mac电脑上有没有添加过这个 , 命令 : adb devices 如果显示出,下面字样,说明之前添加过了,下面就可以不用再看了。 List of devices attached 42f6940daa32bf91device 3. 添加android设备第一步:打开终端,输...

Latex学习(载入图片并居中)

  这里载入的图片和tex源文件是在一个目录下的,居中最好用centerline,我试了试center和centering,好像都不行。什么begin{figure},end{figure}好像也都不行。 代码如下: \documentclass{cctart} \usepackage{graphicx} %载入图形包 \begin{docum...

Fiddler抓包

Fiddler抓包   pc端抓包 Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。当Fiddler退出的时候它会自动注销,这样就不会影响别的 程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。解决的办法是重新启动下Fiddler。 1.配置 打开Fid...

tomcat6下载安装

我电脑的当前环境:win10、jdk1.8 下载地址:https://archive.apache.org/dist/tomcat/tomcat-6/v6.0.28/bin/ 下载之后直接解压。 点击bin下的startup.bat文件启动即可。 如果启动的时候报以下错误: java.net.ConnectException: Connection re...

Python-进程与线程

进程与线程的历史 我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配、任务的调度。 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等。 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就...