机器语言——码运算(具体解释反码补码由来)

在高中之前,数学是这种。1+1=2 .这些都是死的。

上了大学之后。这个世界是这种……

机器语言最低级的语言,仅仅有两个标志 0和1.通过这两个标志来实现计算。

曾经我们所做的数学运算都是在10进制上面进行的。而计算机仅仅能用二进制的数来进行运算。

大家都知道9用机器语言为 1001(进制的转换不做具体介绍)

再转换之前。这个数但是有要求的。这个数必须是正整数。才干够进行转换。

假设这个数为 -9。那么这个数怎样用机器语言来表示呢。

假设是小数。又是怎样表示的。

原码:

+9和-9,不就是相差一个符号么,多给一个位。进行标志不就能够了嘛。

+9表示为 0000 1001

-9表示为 0001 1001

利用二进制的数来处理 我们已知的问题,无非就是编码,制定规则而已。

然后,人们就把这样的加上符号位的表示方法 称为  原码。

计算机中,能够直接计算的运算。仅仅有一个加法。

比方:9+11=20

1001+1011=1 0100

假设。在进行运算的时候使用原码进行运算

即:0000 1001+0000 1011=01 0100

这个运算是正整数之间的加法,假设在进行运算的数之间,有小数,或者 负数。

那应该怎样处理呢?

注:以下中的码。带下划线的为符号位。

反码:

人们都知道。包括负数的加法。实际上就是所谓的减法。所以要处理的就是,怎样把负数增加到刚才的加法运算中。

9-3=6   改写成9+(-3)=6

使用原码表示进行运算:0000 1001 +0001 0011=11100=-12

这个结果,显然就不对了吧。

那这个问题又是怎样产生的?这个问题,是因为把原码中的符号位进行了计算,导致结果不对的。

既然结果不对,那么就编呗。反正找到一个能计算正确的规则。起个名字不就得了。

首先。要想正确。须要把符号位 也能够进行计算。

首先,两个数进行运算的时候.符号位后面的字符串,代表的才是真实数值的绝对值。

补码引例

在说补码之前。先举一个样例。

在现实生活中。某一个时刻。你看钟表的时候是9点。

之后,你活动了9个小时。如今是几点?

先说正常人是怎么算的。正常人肯定是:9+9-12=6  嗯,如今6点了。

另一种算法,就是。你知道12个小时是一圈。那么过去了9个小时,则能够这么算:9-(12-9)=6  也是6点。

在来看一个上面这个样例:

+9 + (-3)

0000 1001 + 0001 0011

假设利用原码进行计算,肯定结果不对了。符号位之前的临时不考虑

我把负数的原码 进行一下转换。转换成 1100

之后在进行计算: 0000 1001 + 0001 1100  = 0010 0101     符号位发生了变化。

数值应该为21.可是21>15=2^4-1 所以 影响了符号位。

在自己算一下 -3 到 12的改变量。 所以结果为 21-15=+6

在此之前。没有考虑符号位。

不考虑符号位。将符号位之后的符号,都按位取反。0改成1。1改成0.

这个形式的编码称为 反码。

这样计算机就能够计算 二进制的减法了。

补码

在上述的减法运算中,尽管能够得到运算的结果。可是亲们发现了没。

数值6根本就没有在结果中显示出来。

所以为了解决上述问题。

由-3 转换成 +12的 过程中,数值改变了15. 可是。15这个数值 效果,不能等价于 时钟运算中的 12小时。

所以要将反码进行+1之后再进行计算。

即 -3的补码=反码+1=0001 1100 +1=0001 1101

之后的运算:0000 1001+0001 1101=00100110  数值为+6

符号位,发生变化 偶数 仍为正数。

如今懂了什么叫补码了吧。

补码,你还记得什么叫补角吗?这个跟那个意思一样,就是凑一块就圆满了。

补码就是 在原码的基础上,找到那个  与他正好互补,以便形成一个符号位的数。

最简单的获取方式:原码-〉反码  然后+1

浮点数

在计算机的运算中,也要处理小数的运算。

即所谓的浮点数。

上次某同学问我。这个题怎么 0.1+0.1=1啊 。这明显就是一个坑啊。

利用人们已经形成的十进制思想。导致想不通。

在学习这个问题之前,首先要说一下。在10进制的小数中。是怎么定义的。

0.1 0.01 分别代表什么。

十进制中,每一个位置所代表的权重都是不同的。

比方100 中的 1。所代表的就是 10^2

那么,0.01中的1代表的是什么? 非常显然  这个小数里面的1 所代表的是 10^-2

相同的。十进制的数值每一个位置都有自己的权重。那么在2进制的数值中。

每一个数也都有自己的权重。

0.1 非常明显就是 2^-1 了。 那么0.1+0.1 …… 你的世界观还没被毁……

至于浮点数的运算,我就不啰嗦了。浮点数的运算。在计算机中,也就是加了点限制。事实上,全是自己通过0和1 进行 编码。说白了,就是瞎编,制造规则。然后行的通。就用。

总结:

1、看书看到公式。别头大。也许做几道题,全都会了,那些公式。

呵呵……

2、没有绝对的正确。

仅仅是那个圈子你还没有接触过而已。

3、书看不懂。看不懂就開始编呗。等你编了差点儿相同,然后回头再去看,突然感觉。似乎编的还挺对……

在写这篇博客之前,我根本就不知道反码补码 是干什么用的,仅仅知道怎样得到反码补码。

在写的过程中,重复思考。

反码补码有什么用处?为什么要引入?搞不明确……那先写着……然后就都写出来了。

假设文章中有错误之处,望斧正。

时间: 2024-11-05 22:55:58

机器语言——码运算(具体解释反码补码由来)的相关文章

机器语言——码运算(详解反补码由来)

在高中之前,数学是这样的,1+1=2 .这些都是死的. 上了大学之后,这个世界是这样的-- 机器语言最低级的语言,只有两个标志 0和1.通过这两个标志来实现计算. 以前我们所做的数学运算都是在10进制上面进行的.而计算机只能用二进制的数来进行运算. 大家都知道9用机器语言为 1001(进制的转换不做详细介绍) 再转换之前,这个数可是有要求的,这个数必须是正整数,才可以进行转换.如果这个数为 -9,那么这个数如何用机器语言来表示呢.如果是小数,又是如何表示的. 原码: +9和-9,不就是相差一个符

[C++基础]原码/反码/补码、二进制位运算

原码/反码/补码 编码 定义 实例 原码 最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. [+100]原=01100100 [+0]原=00000000 [-100]原=11100100 [-0]原=10000000注意:在原码中,零有两种表示形式. 反码 正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外. [+100]反=01100100 [+0]反=00000000 [-100]反=10011011[-0]反=1111111

C语言原码反码补码与位运算.

目录: 一.机器数和真值     二.原码,反码和补码的基础概念     三.为什么要使用原码,反码和补码     四.原码,补码,反码再深入     五.数据溢出测试     六.位运算的运算说明     七.位运算的简单应用   一.机器数和真值 机器数(computer number)是数字在计算机中的二进制表示形式 机器数有2个特点:一是符号数字化,二是其数的大小受机器字长的限制 比如:十进制中的+6,计算机字长为8位,转换成二进制就是00000110,如果是-6,就是10000110

关于 原码 反码 补码 位运算

二进制 原码:最高位为符号位,0为正  1为负 正数的原码 反码 补码 都是相同的 反码:负数的反码为原码符号位不变 其它对应变化(1变0 0变1) 补码:等于 反码+1 3^-3 =? 运算过程 -3 10000000 00000000 00000000 00000011 原码 11111111 11111111 11111111 11111100 反码 先求得-3的补码 11111111 11111111 11111111 11111101 补码 得到3的补码 00000000 000000

<13>【了解】计算机中的进制+【理解】原码反码补码基本概念+【理解】为什么要引入反码、补码?+【掌握】位运算符介绍及使用+位运算应用:编程实现10进制转2进制

1 #include <stdio.h> 2 3 int main(int argc, const char * argv[]) { 4 5 //定义10进制数,打印出10.8.16进制的值 6 int a = 13; 7 printf("%d\n",a); 8 printf("%o\n",a); 9 printf("%x\n",a); 10 11 //int 64 4个字节 12 int b = 0b0000000000000000

原码, 反码, 补码 详解以及负数的按位与运算

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算

java原码,反码,补码 位运算

原码是什么?反码是什么?补码是什么? 原码:正数:正数转换为二进制位就是这个正数的原码负数:负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码 int 2 原码: 00000000 00000000 00000000 00000010 int -2 原码:10000000 00000000 00000000 00000010 00000000 00000000 00000000 00000011 # 3原码10000000 00000000 00000000 00000011 # -3原

原码, 反码, 补码 详解

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计

[转]原码, 反码, 补码 详解 很全

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计