您好,现在蔡蔡来为大家解答以上的问题。原码反码补码怎么算,补码怎么算相信很多小伙伴还不知道,现在让我们一起来看看吧!
1、-3的补码:11111101反码加一正数的补码表示:正数的补码 = 原码负数的补码 = {原码符号位不变} + {数值位按位取反后+1} or= {原码符号位不变} + {数值位从右边数第一个1及其右边的0保持不变,左边安位取反}以十进制整数+97和-97为例:+97原码 = 0110_0001b+97补码 = 0110_0001b-97原码 = 1110_0001b-97补码 = 1001_1111b2、纯小数的原码:纯小数的原码如何得到呢?方法有很多,在这里提供一种较为便于笔算的方法。
2、以0.64为例,通过查阅可知其原码为0.1010_0011_1101_0111b。
3、操作方法:将0.64 * 2^n 得到X,其中n为预保留的小数点后位数(即认为n为小数之后的小数不重要),X为乘法结果的整数部分。
4、此处将n取16,得X = 41943d = 1010_0011_1101_0111b即0.64的二进制表示在左移了16位后为1010_0011_1101_0111b,因此可以认为0.64d = 0.1010_0011_1101_0111b 与查询结果一致。
5、再实验n取12,得X = 2621d = 1010_0011_1101b 即 0.64d = 0.1010_0011_1101b,在忽略12位小数之后的位数情况下,计算结果相同。
6、3、纯小数的补码:纯小数的补码遵循的规则是:在得到小数的源码后,小数点前1位表示符号,从最低(右)位起,找到第一个“1”照写,之后“见1写0,见0写1”。
7、以-0.64为例,其原码为1.1010_0011_1101_0111b则补码为:1.0101_1100_0010_1001b当然在硬件语言如verilog中二进制表示时不可能带有小数点(事实上不知道哪里可以带小数点)。
8、4、一般带小数的补码一般来说这种情况下先转为整数运算比较方便-97.64为例,经查询其原码为1110_0001.1010_0011_1101_0111b笔算过程:-97.64 * 2^16 = -6398935 = 1110_0001_1010_0011_1101_0111b,其中小数点在右数第16位,与查询结果一致。
9、则其补码为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 与查询结果一致,就是最高位,最左面的第一位;其它位,就是剩下的7位由于运算器进行加法是最快的,因此,使用补码是为了加快计算计算机不会减法`所以用补码把减法变成加法` 你看的数一般就说 "正数的补码是其本身,负数的补码是原码按位取反后1,符号位就是最高位等等`。
本文就为大家分享到这里,希望小伙伴们会喜欢。