當前位置:首頁 » 編程語言 » c語言函數求補碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言函數求補碼

發布時間: 2022-07-19 21:47:13

c語言中,如何求一個數的二進制補碼舉個例子,謝謝!

正數的補碼是其原值
例如佔一個位元組的10,二進制為0 000 1010, 第一位0表示+,
補碼也是0 000 1010
負數的話-10, 二進制為1 000 1010, 第一位1 表示-,
補碼求法為 :符號位不變,其餘取反再加1
1 000 1010 取反 1 111 0101
再加1: 1 111 0110

⑵ c語言中補碼怎麼算的


首先建議樓主去惡補一下「原碼」、「反碼」以及「補碼」的相關知識。

以下我就先來分析一下(假設你已經了解了這些知識):

首先我們以無符號的視點來看待題目中的數據:

n = 0x7FFF
m = 0x8000

可知對於n來說,他的二進制模式為:0111 1111 1111 1111
對於m來說,他的二進制模式為: 1000 0000 0000 0000
可以看到,最高位符號位n為0,而m為1
所以用帶符號數的視角來看待m、n的這串二進制數據,我們知道n符號位(最高位)為零,所以n是正數,而m符號位為1,因而是負數。

對於補碼,正數好計算,就是他的值,也就是0111 1111 1111 1111 = 0x7FFF = 32767

對於負數m,為了知道他的值我們可以這么干:
假設m的絕對值|m| = x,則我們對m就可以得到x
m = 1000 0000 0000 0000
取反:
~m = 0111 1111 1111 1111
加1
~m + 1 = 1000 0000 0000 0000
(這道題數據比較特殊,所以你看到m和~m+1結果貌似一樣,事實上你可以列舉其他值算算,一般這兩個位模式是不同的)
可知x = 32768
則可知m = -x = -32768

以上

⑶ C語言,輸出補碼

求補碼的函數可以參考下面的代碼,我們知道,在內存中,正數的補碼等於他本身,所以直接返回a。負數的補碼正是它在內存中的存在形式,這是我們定義一個unsigned int型的數值去用它來賦值,取得的就是他的補碼的二進制形式。為了驗證,我另外編寫了一個函數,用來輸出二進制,請參考。

unsigned int buma(int a)//用來求得補碼
{
if(a>=0)
return a;
else
{
unsigned int temp=a;
return temp;
}
}

void twoprint(unsigned int a)//用來輸出二進制
{
int temp=a%2;
if(a/2==0)
{
cout<<a<<" ";return ;
}
twoprint(a/2);//這里採用了遞歸調用的方法
cout<<temp<<" ";
}

⑷ C語言的補碼是怎樣求出來的

正數是取原碼,負數是對應正數逐位取反再加一
比如19,原碼用8位二進制是00010011,那麼它的補碼、反碼都是00010011。
而對於-19,因為19的8 位原碼是00010011,逐位取反得
11101100,再加1,11101101
所以-19的原碼是10010011,反碼是11101100,補碼是11101101

⑸ c語言求補碼

發明
補碼
的目的


硬體「加法器」來做減法運算。
換句話說,減一個數,就是加它的
補碼。
正數的補碼就是原數,就是自己。
負數的補碼是它的反碼加1。
反碼,就是
符號位不變,其它位
是1的變0,是0的變1。
變完後,最低位
加1,成了補碼。

⑹ C語言中負數的補碼怎麼求

正數,本身就是補碼。

負數,就用它的正數,減一取反,即可得到補碼。

如,已知:+9 的二進制是:00001001。

下面求-9補碼:

先減一:00001001-1=00001000;

再取反:11110111。

所以有:-9補碼=11110111。

這不就完了嗎!

簡不簡單?意不意外?

原碼反碼符號位,討論這些垃圾幹嘛?

這些垃圾,都是用來騙吃騙喝的!

⑺ 求數的補碼 c語言中

簡單的位運算就可以了
#include <stdio.h>

void printBin(int num){
int i,k=31;
for(i=0;i<32;i++){
printf("%d",(num>>k)&1);//移位並輸出
k--;
}
printf("\n");
}

int main(int argc, char* argv[])
{
int num;
printf("Please input a number, I will tell you what it really is:");
scanf("%d",&num);
printf("It is binary display is:");
printBin(num);
return 0;
}

⑻ C語言中一個數補碼和原碼是如何進行計算的

一個簡單的方式求補碼那就是從原碼的最右端開始找到第一個不為零的數(就是1)從下一個開始取反
如1001
1100的補碼就是0110
0100,至於原碼用10進制數依次除以2安順序保留余數,知道商為零為止,那麼最後依次的余數就是原碼的最高位,倒數第2個余數就是原碼的次高為,這樣依次,知道第一個余數就是原碼的最低位了

⑼ 在C語言中補碼什麼意思

補碼主要是為了cpu運算器在進行減法運算時避免借位而設立的。

在早期,cpu中的運算器部分,只要實現一個加法器就可以完成四由算術運算。

因為計算機中的數值編碼是有限位數的,所以減法實際上相當於加上減數的補碼,而乘法是循環的加法,除法是循環的減法。這種思想在數學上叫轉化思想,在兵法上與」借刀殺人「、」借屍還魂「的借是「異曲同工」,用牛頓的話叫做「站在巨人的肩上「。

舉例說明,以8位的二進制為例,要計算1-1,只要用1加上-1的補碼即可。
-1的原碼:1000 0001,最高位是符號為,1表示負數,0表示正數。
-1的反碼:1111 1110, 按位取反是除符號位以外,其它每個位上的0變成1,1變成0。
-1的補碼:1111 1111,在反碼的基礎上是加上1即為補碼。
1-1 = 1+ 1111 1111 = 1 0000 0000 ,因為只有8位的二進製表示方法,此時溢出了,溢出位在硬體上是沒法表示的,因此結果還是0.

⑽ C語言寫一函數:給出一個數的原碼,得到該數的補碼

0100000是八進制數。即二進制數:1000 0000 0000 0000。


z=value&0100000;//意義就是取value的最高位。
if(z==0100000)//如果最高位是1,即為負數,需要求補
z=~value+1;//求補,即取反+1
else
z=value;