當前位置:首頁 » 操作系統 » 用源碼相減

用源碼相減

發布時間: 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 20:56:04 瀏覽:807
flash游戲反編譯 發布:2024-10-26 20:43:59 瀏覽:710
java的hashmap緩存 發布:2024-10-26 20:33:07 瀏覽:116
紅米2存儲空間不足 發布:2024-10-26 20:33:05 瀏覽:297
java源碼pdf 發布:2024-10-26 20:22:45 瀏覽:804
中文安卓編程 發布:2024-10-26 20:18:27 瀏覽:821
sql傳遞參數 發布:2024-10-26 20:06:57 瀏覽:248
安卓手機去哪裡找游戲 發布:2024-10-26 20:03:24 瀏覽:913
安卓手機圖標誤刪如何恢復 發布:2024-10-26 19:38:34 瀏覽:917
彈跳的編程 發布:2024-10-26 19:37:28 瀏覽:454