当前位置:首页 » 操作系统 » 用源码相减

用源码相减

发布时间: 2022-05-24 02:31:30

❶ 原码,补码和反码在计算机中的作用

在计算机中,只用补码代表正负数,进行加减运算。

原码和反码,没有任何用处。

原码和反码,在计算机中,也都不存在。

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

对于十进制数,如果限定了两位,就只有100个数字:0~99。

这时,"减一",就可以用“加99”代替。

如:27-1=26

27+99=(1)26

忽略进位的100,结果不就是相同的吗。

那么,99,就称为:-1 的补数。

-2的补数,就是98。

。。。

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

计算机中,用二进制,代表数字,称为:代码。

八位二进制:00000000~11111111。

按照十进制,就是0~255,共有256组代码。

在计算机中,负数,是以补码存放的。

那么:

-1的补码,就是255(即:11111111)。

-2的补码,就是254(即:11111110)。

。。。

-128的补码,就是128(即:10000000)。

求负数的补码,不难。小学生,都能总结出公式。

对于正数,直接存放就可以,做运算时,也不用进行转换。

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

利用补码,就可以:只用一个加法器,也能做减法了。

这就可以简化硬件。

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

而原码和反码,就不必关心了。

用原码或反码做运算,根本就不能得出正确的结果。

参考一下“谬赐撒瑾”的回答,你就能看到,他是怎么失败的!

因此,在计算机中,根本就没有原码和反码。

❷ 为什么用原码实现乘除运算的规则简单,加减运算不方便

1.
原码表示方法的优点,是在数的真值和它的原码表示之间的对应关系简单,相互转换容易,用原码实现乘除运算的规则简单.缺点是用原码实现加减运算很不方便.要比较参与加减运算两个数的符号,要比较两个数的绝对值的大小,还要确定运算结果的正确的符号等,因此在计算机中经常用后面介绍的补码实现加减运算.
2.
补码的设计目的是:
⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计.
3.用反码实现算术运算不方便,0值又有两个编码,用得不很普遍.
希望能帮助你哈

❸ 两个数分别使用原码和补码进行加减运算,结果的真值相等吗

除非发生溢出,否则相等
前提是两个数的真值相等且进行的运算一样

❹ 在计算机中,原码加减交替除法的运算过程中为什么采用的是补码而不是原码

原码加减交替法中使用的被除数是以原码形式出现的,补码加减交替法中被除数是以补码的形式出现的

❺ 原码的减法为什么可以转换成补码的加法意义又是什么呢

时钟,倒拨3小时,可以用正拨9小时来代替。

限定两位数时,减一,就可用+99代替。

如:24-1=23

24+99=(1)23

只取两位数,两个结果,就是相同的。

99,就是-1 的补数。

(在二进制时,就称为“补码”。)

就是说:当限定计算的位数后,使用补码,就可用加法代替减法运算

意义:仅用一个加法器,就可做加减两种运算。减少硬件,厂家省钱。

❻ 求用C语言来实现原码的加减法运算

#include <stdio.h>
struct s_node
{
int data;
struct s_node *next;
};
typedef struct s_node s_list;
typedef s_list *link;
link operator=NULL;
link operand=NULL;
link push(link stack,int value)
{
link newnode;
newnode=(link) malloc(sizeof(s_list));
if(!newnode)
{
printf("\nMemory allocation failure!!!");
return NULL;
}
newnode->data=value;
newnode->next=stack;
stack=newnode;
return stack;
}
link pop(link stack,int *value)
{
link top;
if(stack !=NULL)
{
top=stack;
stack=stack->next;
*value=top->data;
free(top);
return stack;
}
else
*value=-1;
}
int empty(link stack)
{
if(stack==NULL)
return 1;
else
return 0;
}
int is_operator(char operator)
{
switch (operator)
{
case '+': case '-': case '*': case '/': return 1;
default:return 0;
}
}
int priority(char operator)
{
switch(operator)
{
case '+': case '-' : return 1;
case '*': case '/' : return 2;
default: return 0;
}
}
int two_result(int operator,int operand1,int operand2)
{
switch(operator)
{
case '+':return(operand2+operand1);
case '-':return(operand2-operand1);
case '*':return(operand2*operand1);
case '/':return(operand2/operand1);
}
}
void main()
{
char expression[50];
int position=0;
int op=0;
int operand1=0;
int operand2=0;
int evaluate=0;
printf("\nPlease input:\n");
gets(expression);
while(expression[position]!='\0'&&expression[position]!='\n')
{
if(is_operator(expression[position]))
{
if(!empty(operator))
while(priority(expression[position])<= priority(operator->data)&&
!empty(operator))
{
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);
operator=pop(operator,&op);
operand=push(operand,two_result(op,operand1,operand2));
}
operator=push(operator,expression[position]);
}
else
operand=push(operand,expression[position]-48);
position++;
}
while(!empty(operator))
{
operator=pop(operator,&op);
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);
operand=push(operand,two_result(op,operand1,operand2));
}
operand=pop(operand,&evaluate);
printf("The expression [%s] result is '%d' ",expression,evaluate);
getch();
//求采纳。

❼ 为什么计算机中不用源码做加减运算

原码就是原来的表示方法
反码是除符号位(最高位)外取反
补码=反码+1
以前学习二进制编码时,老师讲了一堆堆的什么原码啊反码啊补码啊xxxx转换啊,还有负数的表示方式啊 总是记不零清,终于从网上找到了一种比较好的讲解方式,保存再share一下,不过为了系统化讲解,又找来了一些编码的基础知识,如果只想看负数编码记忆法,请跳转到
1.如果你不知道二进制怎么编码,请继续,否则请跳到2
1字节 = 8位,所以它能表示的最大数当然是8位都是1(既然2进制的数只能是0或1,如果是我们常见的10进制,那就8位都为9,这样说,你该懂了?)
1字节的二进制数中,最大的数:11111111。
这个数的大小是多少呢?让我们来把它转换为十进制数。
无论是什么进制,都是左边是高位,右边是低位。10进制是我们非常习惯的计数方式,第一位代表有几个1(即几个100),第二位代表有几个10(即几个101),第三位代表有几个100(即有几个102)…,用小学课本上的说法就是:个位上的数表示几个1,十位上的数表示向个10,百位上的数表示几个100……
同理可证,二进制数则是:第1位数表示几个1 (20),第2位数表示几个2(21),第3位数表示几个4(22),第4位数表示向个8(23)……
以前我们知道1个字节有8位,现在通过计算,我们又得知:1个字节可以表达的最大的数是255,也就是说表示0~255这256个数。
那么两个字节(双字节数)呢?双字节共16位。 1111111111111111,这个数并不大,但长得有点眼晕,从现在起,我们要学会这样来表达二制数:
1111 1111 1111 1111,即每4位隔一空格。
双字节数最大值为:
1 * 215 + 1 *214 + 1* 213 + 1 * 212 + 1 * 211 + 1 * 210 + …… + 1 * 22 + 1 * 21 + 1* 20 = 65535
很自然,我们可以想到,一种数据类型允许的最大值,和它的位数有关。具体的计算方法方法是,如果它有n位,那么最大值就是:
n位二进制数的最大值:1 * 2(n-1) + 1 * 2(n-2) + ... + 1 * 20
2、理解有符号数和无符号数
负数在计算机中如何表示呢?这一点,你可能听过两种不同的回答。
一 种是教科书,它会告诉你:计算机用“补码”表示负数。可是有关“补码”的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一切。再 者,用“补码”表示负数,其实是一种公式,公式的作用在于告诉你,想得到问题的答案,应该如何计算。却并没有告诉你为什么用这个公式就可以得到答案? -----我就是被这个弄混淆的>_<
另 一种是一些程序员告诉你的:用二进制数的最高位表示符号,最高位是0,表示正数,最高位是1,表示负数。这种说法本身没错,可是如果没有下文,那么它就是 错的。至少它不能解释,为什么字符类型的-1用二进制表示是“1111 1111”(16进制为FF);而不是我们更能理解的“1000 0001”。(为什么说后者更好理解呢?因为既然说最高位是1时表示负数,那1000 0001不是正好是-1吗?-----re!当初偶就是这么想的,so一直在脑中打架,越打越混淆=,=)。
让我们从头说起。
2.1、你自已决定是否需要有正负。
就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个量是否需要正负。如果这个量不会有负值,那么我们可以定它为带正负的类型。
在计算机中,可以区分正负的类型,称为有符类型,无正负的类型(只有正值),称为无符类型。
数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则只有有符类型。
字符类型也分为有符和无符类型。
比如有两个量,年龄和库存,我们可以定前者为无符的字符类型,后者定为有符的整数类型。
2、使用二制数中的最高位表示正负。
首先得知道最高位是哪一位?1个字节的类型,如字符类型,最高位是第7位,2个字节的数,最高位是第15位,4个字节的数,最高位是第31位。不同长度的数值类型,其最高位也就不同,但总是最左边的那位(如下示意)。字符类型固定是1个字节,所以最高位总是第7位。
(红色为最高位)
单字节数: 1111 1111
双字节数: 1111 1111 1111 1111
四字节数: 1111 1111 1111 1111 1111 1111 1111 1111
当我们指定一个数量是无符号类型时,那么其最高位的1或0,和其它位一样,用来表示该数的大小。
当我们指定一个数量是有符号类型时,此时,最高数称为“符号位”。为1时,表示该数为负值,为0时表示为正值。
3、无符号数和有符号数的范围区别。
无符号数中,所有的位都用于直接表示该值的大小。有符号数中最高位用于表示正负,所以,当为正值时,该数的最大值就会变小。我们举一个字节的数值对比:
无符号数: 1111 1111 值:255 1* 27 + 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20
有符号数: 0111 1111 值:127 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20
同样是一个字节,无符号数的最大值是255,而有符号数的最大值是127。原因是有符号数中的最高位被挪去表示符号了。并且,我们知道,最高位的权值也是最高的(对于1字节数来说是2的7次方=128),所以仅仅少于一位,最大值一下子减半。
不过,有符号数的长处是它可以表示负数。因此,虽然它的在最大值缩水了,却在负值的方向出现了伸展。我们仍一个字节的数值对比:
无符号数: 0 ----------------- 255
有符号数: -128 --------- 0 ---------- 127

同样是一个字节,无符号的最小值是 0 ,而有符号数的最小值是-128。所以二者能表达的不同的数值的个数都一样是256个。只不过前者表达的是0到255这256个数,后者表达的是-128到+127这256个数。
一个有符号的数据类型的最小值是如何计算出来的呢?
有符号的数据类型的最大值的计算方法完全和无符号一样,只不过它少了一个最高位(见第3点)。但在负值范围内,数值的计算方法不能直接使用1* 26 + 1* 25 的公式进行转换。在计算机中,负数除为最高位为1以外,还采用补码形式进行表达。所以在计算其值前,需要对补码进行还原。这里,先直观地看一眼补码的形式:
以我们原有的数学经验,在10进制中:1 表示正1,而加上负号:-1 表示和1相对的负值。
那么,我们会很容易认为在2进制中(1个字节): 0000 0001 表示正1,则高位为1后:1000 0001应该表示-1。
然而,事实上计算机中的规定有些相反

❽ 谁会原码加减法帮我(好就加分)

原码加减规则:是指操作数与运算结果均用原码表示,运算时将尾数进行加减,符合单独处理。

简介

计算机中所有的数均用0,1编码表示,数字的正负号也不例外,如果一个机器数字长是n位的话,约定最左边一位用作符号位,其余n-1位用于表示数值。

在符号位上用"0"表示正数;用"1"表示负数。数值位表示真值的绝对值。凡不足n-1位的,小数在最低位右边加零;整数则在最高位左边加零以补足n-1位。这种计算机的编码形式叫做原码。

❾ 用原码加减法交替和补码加减交替法计算x/y x=-13/32 y=-27/32

这是什么题目啊!
原码,是不适合进行运算的。
为此,才研究出来了补码,就可以用加法代替减法或负数。
有了补码,就不再用原码做计算了。

❿ 原码的减法

你想想102-29,减的时候是怎么借位的,0被借位之后变成了什么。借一位就是加10,二进制就是加2,如果向"0"借位,待会0(已经是-1了)向1借位的时候,就变成9,而不是10,(二进制就是0变成2-1,而不是2)。
13-7,即1101减0111,得0110,即6,验证正确

热点内容
安卓手机图标误删如何恢复 发布:2024-10-26 19:38:34 浏览:916
弹跳的编程 发布:2024-10-26 19:37:28 浏览:453
主机销售网站源码 发布:2024-10-26 19:36:36 浏览:103
linux内核视频 发布:2024-10-26 19:30:16 浏览:293
微信猜拳算法 发布:2024-10-26 19:23:35 浏览:390
android编译第三方库 发布:2024-10-26 19:14:20 浏览:615
苹果手机怎么用蓝牙传照片给安卓 发布:2024-10-26 18:57:40 浏览:615
ios8程序加密 发布:2024-10-26 18:30:27 浏览:533
密码门锁没电了用什么数据线 发布:2024-10-26 18:21:11 浏览:855
linuxloop 发布:2024-10-26 18:20:46 浏览:932