当前位置:新励学网 > 建筑专业 > 二进制数的补码为()。

二进制数的补码为()。

发表时间:2024-07-22 15:40:37 来源:网友投稿

二进制数的补码为()。

A 、11101

B 、01101

C 、00010

D 、10011

参考答案

【正确答案:D】

原码是指将设高位作为符号位(0表示正,1表示负),其他数字位代表数值本 身的绝对值数字表示方式。反码表示规则为:如果是正数,则表示方法与原码一样;如果 是负数,则保留符号位1,然后将整个数字的原码按照每位取反,补码主要是为了解决负 数的运算问题,负数的补码就是反码加1。

二进制数反码和补码的算法

在计算机系统中,数值,一律采用补码表示和存储。

在计算机中原码反码,都是不存在的。

因此原码反码,根本就没有任何用处,不必讨论。

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

补码实际上,它就是一个“代替负数”的正数。

使用了补码(正数)之后,在计算机中,就没有负数了。

同时也就没有了减法运算。

因此不但能简化算法,而且顺便就能简化计算机的硬件。

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

正数怎么能代替负数呢?

你看看两位十进制数(0~99)吧:

25 - 1 = 24

25 + 99 = (一百) 24

只要你舍弃进位,只保留两位,+99 就能代替-1。

+99,这就是-1 的补数。

对应关系:补数=负数+计数周期(10^2 = 100)。

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

计算机中使用二进制,补数,也就改称为:补码。

8 位 2 进制数,其计数周期,就是:2^8 = 256。

-1 的补码,就是:-1 + 256 = 255 = 1111 1111 (二进制)。

对吗? 分别用十进制、二进制,计算一下试试:

3 = 0000 0011

-1 =+ 1111 1111

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

2 = (1) 0000 0010

只要舍弃进位,这两种算法,结果,就是相同的。

同理-2 补码就是:254 = 1111 1110。

-128 的补码是:

1、28 = 1000 0000。

零和正数必须直接参加运算,不可变换。

零和正数不需要变换,也就不存在“正数的补码。

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

补码的来源和意义,就是这些。

你如果从“原码反码符号位”开始学补码,肯定是“学不懂”的。

老外脑子不好用,周期、等效什么的,当然也是搞不懂的。

因此才编造了“原码反码”一大滩垃圾!

其实那些都是无稽之谈,随口乱讲的,并无任何理论依据。

而且在八位的原码反码中,都没有-128。

那么-128 的补码,你们怎么求呢?

二进制的补码多少位?

1、正数的补码表示:正数的补码 = 原码负数的补码 = {原码符号位不变} + {数值位按位取反后+1}or= {原码符号位不变} + {数值位从右边数第一个1及其右边的0保持不变,左边安位取反}以十进制整数+97和-97为例:+97原码 = 0110_0001b+97补码 = 0110_0001b-97原码 = 1110_0001b-97补码 = 1001_1111b2、纯小数的原码:纯小数的原码如何得到呢?方法有很多,在这里提供一种较为便于笔算的方法。以0.64为例,通过查阅可知其原码为0.1010_0011_1101_0111b。操作方法:将0.64 * 2^n 得到X,其中n为预保留的小数点后位数(即认为n为小数之后的小数不重要),X为乘法结果的整数部分。此处将n取16,得X = 41943d = 1010_0011_1101_0111b即0.64的二进制表示在左移了16位后为1010_0011_1101_0111b,因此可以认为0.64d = 0.1010_0011_1101_0111b 与查询结果一致。再实验n取12,得X = 2621d = 1010_0011_1101b 即 0.64d = 0.1010_0011_1101b,在忽略12位小数之后的位数情况下,计算结果相同。

3、纯小数的补码:纯小数的补码遵循的规则是:在得到小数的源码后,小数点前1位表示符号,从最低(右)位起,找到第一个“1”照写,之后“见1写0,见0写1”。以-0.64为例,其原码为1.1010_0011_1101_0111b则补码为:

1.0101_1100_0010_1001b当然在硬件语言如verilog中二进制表示时不可能带有小数点(事实上不知道哪里可以带小数点)。

4、一般带小数的补码一般来说这种情况下先转为整数运算比较方便-97.64为例,经查询其原码为1110_0001.1010_0011_1101_0111b笔算过程:-97.64 * 2^16 = -6398935 = 1110_0001_1010_0011_1101_0111b,其中小数点在右数第16位,与查询结果一致。则其补码为1001_1110_0101_1100_0010_1001b,在此采用 负数的补码 = {原码符号位不变} + {数值位按位取反后+1} 方法5、补码得到原码:方法符号位不动,幅度值取反+1 or符号位不动,幅度值-1取反-97.64补码 = 1001_1110(.)0101_1100_0010_1001b取反 = 1110_0001(.)1010_0011_1101_0110b+1 = 1110_0001(.)1010_0011_1101_0111b 与查询结果一致6、补码的拓展:在运算时必要时要对二进制补码进行数位拓展,此时应将符号位向前拓展。-5补码 = 4'b1011 = 6'b11_1011ps.原码的拓展是将符号位提到最前面,然后在拓展位上部0.-5原码 = 4‘b’1101 = 6'b10_0101,对其求补码得6'b11_1011,与上文一致。

免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。

如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!