#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=1i<=15i++)
{
a[i]=(num/2)%2
num/=2
}
for(i=15i>=0i--)
printf("%2d",a[i])
}
void oppose(int n)/*定义转化为补码的函数*/
{
int i
for(i=0i<=15i++)
{
switch(a[i])
{
case 1:a[i]=0break
case 0:a[i]=1break
}
}
for(i=0i<=15i++)
{
a[i]++
if(a[i]>1) a[i]=0
else break
}
for(i=15i>=0i--)
printf("%2d",a[i])
}
#include<stdio.h>int main(){
int i,j,k
int a[16], af[16], ab[16]//af存储反码,ab存储补码第0位为符号位
char b[16]
scanf("%s", b)
for(i = 0b[i] != '\0'i++){
a[i] = b[i] - '0'
}
j = i-1
ab[0] = af[0] = a[0]//符号位始终不变
if(a[0] == 1){//当从屏幕输入的是负数,则作相应变换
for(i = ji >0i--){
af[i] = 1 - a[i]
ab[i] = a[i]
if(a[i] == 1){
i--
break
}
}
k = i
for(i >0i--)
af[i] = 1 - a[i]
for(i = ki >0i--)//补码从末位数起第一个不为0,以后均取反
ab[i] = 1 - a[i]
}
else{//如果是正数,则全部复制
for(i = ji >0i--){//正数反码、补码都与原码相同
af[i] = a[i]
ab[i] = a[i]
}
}
printf("对应的反码是:\n")
for(i = 0i <= ji++)
printf("%d", af[i])
printf("\n")
printf("对应的补码是:\n")
for(i = 0i <= ji++)
printf("%d", ab[i])
}
在vc下编译测试通过。另,本代码未考虑输入非法问题,所输入的数字智能由1和0组成
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)