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

用c語言寫輸入補碼輸出補碼

發布時間: 2022-06-16 12:18:51

c語言求補碼

發明
補碼
的目的


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

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

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

㈢ 剛接觸c語言 是說輸入的時候 電腦當做補碼 然後輸出原碼嗎

「輸入的時候 電腦當做補碼 然後輸出原碼」 這樣說是不正確的。

計算機存儲整型數據都是採用補碼來表示的。用補碼
1.解決了+0,-0的問題,
2.所有的運算都可以採用加法來實現

我們在輸入數據的時候,都是人現實生活中能理解的數:如,10進制數,計算機在存儲的時候會自動轉換成補碼來存放和運算。 輸出時,又會按人的要求,自動轉換成相應的可識別的數據來顯示。
short在32位以上的機器上占兩個位元組,是個有符號數,能表示的數據范圍為:-32768~32767。你輸入65535,走出它的表示範圍,計算機中存儲的是16個1,對於short類型,16個1表示的是-1,所以,你的輸出是-1

㈣ c語言遞歸函數 輸出十進制數的二進制的補碼,怎麼寫

如果是正數,補碼=原碼,如果是負數,x = x + 1 + 0xffffffff,再對x求原碼
scanf("%d", &x);
x = (x + 1 + 0xffffffff) % 0xffffffff;
//TODO...再對x求原碼就行
//這里0xFFFFFFFF為int能表示的最大值,如果int佔4個位元組的話,一般都是4個位元組

㈤ 求一個C語言程序使輸入一個數能顯示出計算出它的原碼和補碼並顯示出來(在VC6.0上運行)

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
void convert(int num);
void oppose(int n);
int a[16];
void main(void)
{
int num,jdz;
char ans;
while(1)
{
printf("請輸入任意一個十進制整數: ");
scanf("%d",&num);
printf("\n");
printf("其絕對值為: ");
jdz=abs(num);
printf("%d\n\n",jdz);
printf("其原碼為: \n");
convert(jdz);
printf("\n\n");
if(num>=0)
{
printf("其補碼為: \n");
convert(jdz);
printf("\n\n");
}
else
{
printf("其補碼為: \n");
oppose(a[16]);
printf("\n\n");
}
printf("按回車鍵繼續或按ESC鍵結束程序!!!\n");
ans=getch();
while(ans!=13 && ans!=27)
{
ans=getch();
}
if(ans==13) system("cls");
if(ans==27)
{
system("cls");
printf("謝謝使用!!!\n");
break;
}
}
}

void convert(int num) /*定義轉化為原碼的函數*/
{
int i;
a[0]=num%2;
for(i=1;i<=15;i++)
{
a[i]=(num/2)%2;
num/=2;
}
for(i=15;i>=0;i--)
printf("%2d",a[i]);
}

void oppose(int n) /*定義轉化為補碼的函數*/
{
int i;
for(i=0;i<=15;i++)
{
switch(a[i])
{
case 1:a[i]=0;break;
case 0:a[i]=1;break;
}
}
for(i=0;i<=15;i++)
{
a[i]++;
if(a[i]>1) a[i]=0;
else break;
}
for(i=15;i>=0;i--)
printf("%2d",a[i]);
}

㈥ C語言程序題,任意輸入一個整數,編一個程序,使其輸出輸出相應的原碼、反碼及補碼.


代碼資料:

#include "stdio.h"

#include "limits.h"

void myout(unsigned n){

unsigned k;

for(k=~INT_MAX;k>0;k>>=1)

printf("%d",n&k || 0);

}

int main(int argc,char *argv[]){

int n;

printf("Enter n(int)... n=");

if(scanf("%d",&n)!=1){

printf("Input error, exit... ");

return 0;

}

printf("%d: ",n);

printf("原碼: ");

myout(n>=0 ? n : (~n+1)|~INT_MAX);

printf(" 反碼: ");

myout(n>=0 ? n : ~(-n));

printf(" 補碼: ");

myout(n);

putchar(' ');

return 0;

}

㈦ 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語言編寫一個實現求任意整數X的補碼

k<,y[k]);n".h> if ((j+1)%8;;);k++) { f[k]=y[k];for(k=j;);stdio; b[k]=y[k];2,k;}else w=0; y[j]=0,n; for( k=0:"i;else f[k]=1; if ((j+1)%8; m=abs(n):"k>請輸入一個整數!=0) for(;k--)printf(" for(k=0; for(k=0;y[j]=1,j:":"=0) { for(j=0;);printf("!=0;j++) y[j]=0; i=i+1;j++) y[j]=a[j];反碼!=0) { a[i]=m%2;\ for(j=0;),a[10];j;%d"}b[k]=1;(j+1)%8;j++) y[j]=a[j];=0;n";j;(j+1)%8;for(k=j;);printf(" } printf("else b[k]=f[k]+w,f[k]);#include<k++) if(y[k]) f[k]=0; scanf(",y[100]; m=m/math!=0) for(; } if (n>for(k=j,b[k]);k--)printf("f[k]=1;if (b[k]==2){b[k]=0;%d";w=1;i; printf(",b[100]; printf("原碼;k<=j;k>\ printf("=0;printf(").h>j<補碼;=0,n),i=0;k<k--)printf("void main(){ int m;)!=0;,f[100];k>j++) y[j]=0;%d"%d"n" while (m#include<j<\k++) {if (k==0)b[k]=f[k]+1; } } else { int w=0