假设机器字长为2个字节,求-98的原码、反码、补码?
发布网友
发布时间:2022-04-26 10:29
我来回答
共2个回答
热心网友
时间:2022-06-27 09:39
#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]);
}
热心网友
时间:2022-06-27 09:40
原码(最高位为符号位)
1000 0000 0110 0010
反码 (符号位不变,对原码其它位取反后)
1111 1111 1001 1101
补码(符号位不变,对原码其它位取反后,再加1)
1111 1111 1001 1110
原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用1表示负号
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的
机器数的反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的