正整數(shù)的補碼就是它本身
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供大冶網(wǎng)站建設(shè)、大冶做網(wǎng)站、大冶網(wǎng)站設(shè)計、大冶網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、大冶企業(yè)網(wǎng)站模板建站服務(wù),十多年大冶做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
負整數(shù)的補碼就是它在內(nèi)存中的存儲值
#includestdio.h
void main()
{
int n;
scanf("%d", n);
printf("n的補碼:%x\n", n);/* 16進制和2進制等價 */
}
如果你的任意整數(shù)要求1000位數(shù)或者更大,那就要用數(shù)組來存儲,并按照補碼規(guī)則來計算:負數(shù)的補碼就是對反碼加一,而正數(shù)不變。
首先,下面的是主函數(shù),上面的是所調(diào)用的函數(shù)。int n; 就是定義了一個整數(shù)n,他是一個變量。下面的一名scanf("%d",n),就是通過鍵盤輸入給n賦值,因為第一步你只定義了他,他還沒有值,第二步就是給他賦值。并且這種方式是通過鍵盤輸入的方式給n賦值。之后調(diào)用fun函數(shù),fun(n)就是把剛從鍵盤上接收的n值一并的帶到函數(shù)中。之后看void函數(shù),他就是fun函數(shù),把n的值傳給i,那么i就有了值,下面的就判斷i的值,如果i大于1,再次執(zhí)行fun函數(shù),此時的fun函數(shù)所自帶的參數(shù)是i/2的商,如果以21為例的話,那么就是10,調(diào)用fun函數(shù),i的值就是10,再判斷i的值,此是還是大于1,接著把10/2的值傳給i,再判斷,一直到i不大于1為止,就輸出結(jié)果,不知道是否明白
0100000是八進制數(shù)。即二進制數(shù):1000 0000 0000 0000。
z=value0100000;//意義就是取value的最高位。
if(z==0100000)//如果最高位是1,即為負數(shù),需要求補
z=~value+1;//求補,即取反+1
else
z=value;
求補碼的函數(shù)可以參考下面的代碼,我們知道,在內(nèi)存中,正數(shù)的補碼等于他本身,所以直接返回a。負數(shù)的補碼正是它在內(nèi)存中的存在形式,這是我們定義一個unsigned int型的數(shù)值去用它來賦值,取得的就是他的補碼的二進制形式。為了驗證,我另外編寫了一個函數(shù),用來輸出二進制,請參考。
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)
{
couta" ";return ;
}
twoprint(a/2);//這里采用了遞歸調(diào)用的方法
couttemp" ";
}