精华内容
下载资源
问答
  • 1、二进制数补码
    千次阅读
    2020-12-29 21:02:38

    正数的补码 = 原码

    负数的补码 = {原码符号位不变} + {数值位按位取反后+1} or

    = {原码符号位不变} + {数值位从右边数第一个1及其右边的0保持不变,左边安位取反}

    +97原码 = 0110_0001b
    +97补码 = 0110_0001b
    
    -97原码 = 1110_0001b
    -97补码 = 1001_1111b
    
    更多相关内容
  • 在 MATLAB 中计算有符号整数的二进制补码
  • 这些函数像内置的 MATLAB 函数 BIN2DEC 和 DEC2BIN 一样在二进制字符串和十进制之间进行转换,但可以容纳负整数(通过二进制补码)和分数正负数(通过二进制补码固定点和字符串中的二进制小数点)。 请注意,许多...
  • 笔者刚学数字电路,就在二进制补码处踩了许多坑,下面就来写一下我对二进制补码的感悟。 提示:以下是本篇文章正文内容,下面案例可供参考 一、生活中了解补码 首先展示一下补码的公式N(补)=R^n-N 这里的N是原码...


    前言

    笔者刚学数字电路,就在二进制补码处踩了许多坑,下面就来写一下我对二进制补码的感悟。


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、生活中了解补码

    首先展示一下求补码的公式N(补)=R^n-N
    这里的N是原码,R是基数,n是位数,N(补)是补码
    我们用时钟来举一个例子:
    有点大。。。

    假如时钟要从0点转到3点,我们可以怎么转?首先,有两种方法:顺时针转3个格或者逆时针转12(基数)-3(原码)=9个格,在这里,这个9就是3在时钟里的补码

    二、数字电路或系统中补码有什么作用?

    补码是用来方便解决负数在数字电路或系统中的表示问题的。

    三、补码,原码,反码之间的转换

    1.例子

    首先,当二进制数是正数时,它的补码,反码,原码相同;当二进制数是负数时,它的反码为原码的数值位取反,补码为反码+1.
    我们来举一个例子看看:表格除去第一行,每一列顺次为原码,反码,补码

    9-9
    0100111001
    0100110110
    0100110111

    四、补码加法运算

    1.异号补码相加

    我们来举一个例子:
    利用二进制补码的形式计算(6-2)
    列一下竖式:
    在这里插入图片描述
    因为是四位二进制加法计算,所以画圈的进位1丢掉,结果为0100

    2.同号补码相加

    接下来我们看一下同号相加的例子:
    利用二进制补码计算(6+2)
    列一下竖式:
    在这里插入图片描述
    按照上面的舍弃进位,最后的结果为1000是个负值,这个怎么回事?
    这就涉及到了一个名词溢出
    怎么判断溢出
    首先,有这样一个规律:
    两个符号相反的数相加不会产生溢出,只有两个符号相同的数且进位位和符号位不同才会产生溢出
    为什么两个符号相反的数相加不会产生溢出?
    首先,n位二进制补码表示的数的范围是-2^(n-1)~(2^(n-1)-1),那么4位二进制补码表示的数的范围是-8 ~ +7,所以,无论是-8+0还是0+7都不会超出范围。
    怎么解决溢出?
    用上面题来说,只需把4位二进制补码变成5位二进制补码就OK了,如下:
    在这里插入图片描述
    这样结果就是01000也就是十进制8了。

    总结

    以上就是我的感悟了,希望对大家有帮助。

    如果对你有帮助,那就点赞支持一下吧
    微信公众号:编程小随笔 欢迎关注!

    展开全文
  • C++学习记录:将十进制转换为二进制数补码形式) 0、以下操作前提:不动符号位 基本运算: 1、正数的补码 等于 原码; 2、负数的补码 等于 原码取反,末位再加一; 推论: 3、补码补码 等于 原码; 4、反码的...

    2021-3-3
    C++学习记录:将十进制数转换为二进制数(补码形式)
    0、以下操作前提:不动符号位
    基本运算:
    1、正数的补码 等于 原码;
    2、负数的补码 等于 原码取反,末位再加一;
    推论:
    3、补码的补码 等于 原码;
    4、反码的反码 等于 原码;
    5、补码减一 等于 反码。
    ·
    ·

    //源码
    #include <iostream>
    using namespace std;
    #define BIT 16
    
    void transform(int binary[],int num)//简单将十进制转换为二进制
    {
    	for (int i = BIT - 1; i > 0; i--)
    	{
    		binary[i] = num % 2;
    		num /= 2;
    		if (num == 0)
    		{
    			break;
    		}
    	}
    }
    
    void logicNot(int binary[])//逻辑取反
    {
    	for (int i = BIT - 1; i > 0; i--)
    	{
    		if (binary[i] == 1)
    		{
    			binary[i] = 0;
    		}
    		else
    		{
    			binary[i] = 1;
    		}
    	}
    }
    
    void addOne(int binary[])//末位加一
    {
    	for (int i = BIT - 1; i > 0; i--)
    	{
    		if (binary[i] == 1)
    		{
    			binary[i] = 0;
    		}
    		else
    		{
    			binary[i] = 1;
    			break;
    		}
    	}
    }
    
    int main() {
    	int num;
    	cin >> num;
    
    	int binary[BIT] = {0};
    	if (num >= 0)//判断num是否为正数,如果是,则直接转换;
    	{			//否则需要进行相应操作,因为正数和负数的取余操作有点不一样。
    		transform(binary, num);
    	}
    	else
    	{
    		binary[0] = 1;
    		transform(binary, -num);
    		logicNot(binary);
    		addOne(binary);
    	}
    
    	for (int i = 0; i < BIT; i++)//输出
    	{
    		cout << binary[i];
    		if ((i+1) % 4 == 0)
    		{
    			cout << " ";
    		}
    	}
    	cout << endl;
    }
    
    展开全文
  • 二进制数补码及运算(1)

    万次阅读 2017-02-25 22:04:48
    本人研究不深,如有错误请不吝赐教!... = {原码符号位不变} + {数值位从右边第一个1及其右边的0保持不变,左边安位取反} 以十进制整数+97和-97为例: +97原码 = 0110_0001b +97补码 = 0110_0001b -97原码 =

    本人研究不深,如有错误请不吝赐教!!

    1.正数的补码表示

    正数的补码 = 原码

    负数的补码 = {原码符号位不变} + {数值位按位取反后+1}    or

         = {原码符号位不变} + {数值位从右边数第一个1及其右边的0保持不变,左边安位取反}

    以十进制整数+97和-97为例:

    +97原码 = 0110_0001b

    +97补码 = 0110_0001b

    -97原码  = 1110_0001b

    -97补码  = 1001_1111b

    2.纯小数的原码

    纯小数的原码如何得到呢?方法有很多,在这里提供一种较为便于笔算的方法。

    以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_1011

    ps.原码的拓展是将符号位提到最前面,然后在拓展位上部0.

    -5原码 = 4‘b’1101 = 6'b10_0101,对其求补码得6'b11_1011,与上文一致。

    展开全文
  • 二进制原码和补码的转换

    千次阅读 2020-08-24 10:18:32
    1.概念理解(注意正数的反码和补码就是原码,负数的补码是反码加1) 正数:原码=反码=补码 正数举例(数字3):11(原码)=11(反码)=11(补码) 负数:原码取反=反码;反码+1=补码 负数举例(数字-3):111(原码)-...
  • 二进制数补码及运算

    万次阅读 多人点赞 2019-04-22 12:00:47
    二进制十进制小数部分的转化 1.正数的补码表示 正数的补码 = 原码 负数的补码 = {原码符号位不变} + {数值位按位取反后+1} or = {原码符号位不变} + {数值位从右边第一个1及其右边的0保持不变,左边安位取反...
  • 此文用于教学给学生看,欢迎专业人士来拍砖指正,避免本人陷于无知而不自知。
  • 二进制 原码 反码 补码

    千次阅读 多人点赞 2019-12-23 17:56:15
    1、原码,反码和补码概念 正数:原码、反码、补码相同; 以123为例: 原码:01111011 反码:01111011 ...--负数的补码即为负数的二进制数。 以-123为例: 原码:11111011,其中最高位1为符号位。 ...
  • 二进制原码和补码

    千次阅读 2018-11-26 11:03:29
    当原码为正数的时候,正数的原码反码补码都相同,即...现代计算机多数以二进制补码的形式来存放整数。简单的说,一个二进制的每一位对应了一个权值,从最低为到最高位,权值依次是1、2、4、8、16……以此类推。其...
  • 二进制补码计算简单详实的讲解

    千次阅读 2019-02-09 19:08:00
    本文说明一个基本的问题,补码的问题。 需要说明一点补码是对负整数在计算机中存储的一种形式;另一种形式是负数在计算机中可以用符号+负数绝对值的形式表示一个负数;比如(-3: 1000 0011存储)但是这种表示的负数...
  • 针对补码这个常见的概念,引申到小数的补码,并且用实例说明其运算规则。
  • 二进制补码

    千次阅读 2020-09-14 17:09:50
    那就是X小于Y,那么结果肯定是个负数了,我们采用二进制的补码的逆运算,出它对应的正绝对值,再在前面加一个负号就可以了 第一步:计算Z、X、Y的二进制补码的表达式 Z = -((11111111 - Z) + 1);X = (11111111 - ...
  • 今天一场技术笔试一道编程题难住了我,算出一个十进制二进制补码和对应的16进制,由于时间紧张,加上紧张,做的极差,因此mark以下
  • 十个八位十六进制数字,装换为二进制,然后取其补码,然后其平均值。用c编写,代码稍微有点问题,大家可以完善下
  • 有符号二进制数--补码

    千次阅读 2017-06-20 17:31:30
    有符号二进制数原码,反码,补码
  • 二进制补码和十进制的转换

    千次阅读 2020-04-03 23:24:58
    先考虑如何将二进制补码转换为十进制整数: 若符号位是0, 则该是正数, 原码等同于补码. 可以由原码(也就是补码)得知代表的正整数. 若符号为是1, 则该一定是负数, 可按照以下方式转换: 方式一: 先把符号位去掉, ...
  • 二进制运算、二进制数表示:原码、反码和补码
  • 1、此matlab文件可以实现有符号十进制向任意格式定点补码二进制数据的转化:例如 fix16_13格式的定点二进制转化 ,-1.75:'1100100000000000' 0.75:'0001100000000000' 2、如果对定点数据格式不清楚的话,此处...
  • 二进制数的反码和补码

    千次阅读 2019-01-16 22:12:54
    在大学的学习中,一开始自认为已经学会了反码与补码,但在看到多种表述之后,...首先从最一般的意义上,分别说一下二进制的反码和补码: 1、反码 1’s complement 把所有的0变为1,所有的1变为0。 如: 10110010 B...
  • 16进制数(负数)如何求补码

    千次阅读 2021-04-26 21:21:12
    例如数学上,1+(-1)=0,而在二进制中00000001+ 10000001=10000010,换算成十进制为-10,错误。 但是采用他们的补码:00000001+11111111=00000000. 则可以进行正常的直接加减运算。 所以:对于求补码问题。 正数
  • 进制数补码之间的相互转换

    千次阅读 2020-03-30 16:21:03
    前言 这么久过去了,对了补码的概念还是...补码转十进制数的实现 (说不定要要用上呢) 从看过的文章中学来的,与普通2进制数转10进制数的过程几乎一样,但是第一位的计算要乘上(-1)。 Eg. 1111 = -1×1×23 + 1×2...
  • 二进制补码与小数

    千次阅读 2021-06-05 16:46:22
    牛逼的二进制 1.前言 计算机使用二进制来表示所有形式的数据:颜色、文字、图像等。当前辈们想方设法要造一台计算机时都会遇到一个问题:怎么...而补就是用正数表示负数,一个正数的补就是它的负数,所以二进制数与它
  • java基础 二进制补码

    2021-02-12 23:25:41
    二进制补码:1、计算机系统的内部以二进制形式存储数据。2、在Java程序中输入的十进制的数据都会被自动转换为二进制,Java内部也以二进制来进行数值运算,但返回的结果是十进制。二进制补码的原理:正数+负数=模。模...
  • 负数的二进制表示-补码

    千次阅读 2020-04-07 14:51:20
    1 有符号整数和无符号整数 ...另:对具有相同字节的整型而言,由于有符号整数的数据位比无符号整数的数据位少了1位,而且少的这一位恰好是最高位,因此有符号整数能表示的最大整数的绝对值只有最大...
  • 二进制、16进制、补码

    千次阅读 2019-09-11 16:53:33
    二进制 ​ 逢2进1的计数规则 格式:编写时要加0b int 0b //输出2进制: Integer.toBinaryString(); System.out.println(Integer.toBinaryString(n)); //输出10进制: Integer.toString(); System.out....
  • 无符号,2的补码,原码 1. 无符号 例如:四位无符号进制:1 无符号:0001 十进制: 2 无符号:0010 2. 原码(有符号) 最高位用于表示正负号,0表示正,1表示负。 所以,表示正数时原码与无符号...
  • 二进制移位、补码

    2019-07-11 18:00:31
    针对存储在计算机中中二进制的操作,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的。 先说明补码: 说明下-5怎么用二进制表示就明白补码的问题了: 5转化为二进制是101,八位的话为:00000101 然后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,685
精华内容 29,074
关键字:

二进制数求补码