模拟计算机计算源码、反码、补码(难度系数:1颗星)

来源:互联网 发布:二维码生成软件设备 编辑:程序博客网 时间:2024/06/06 03:20

题目描述:
输入一个整数,输出对应的源码、反码和补码(用32位来表示)

参考代码:

#include <stdio.h>int arrNum[33]; //用来保存转换后的二进制,用32位表示,全局变量所有数组元素已经初始化为0了void Print(){//输出此刻的二进制,为了方便运算,之前是倒过来存储的    for (int i = 31; i >= 0; i--)         printf("%d", arrNum[i]);     printf("\n");}int main(){    int studentNumber, i, index = 0, temp;    scanf_s("%d", &studentNumber);    temp = studentNumber < 0 ? -studentNumber : studentNumber;    while (temp)  //把整数转换成二进制存放在数组中    {        arrNum[index++] = temp % 2;        temp /= 2;    }    if (studentNumber >= 0)//如果是正数,原码,反码,补码是一致的    {        printf("原码为:\n");         Print();//输出原码        printf("反码为:\n");         Print();//输出反码        printf("补码为:\n");         Print();//输出补码    }    else    {        arrNum[31] = 1;//为了方便计算,反过来存储,如果输入为负数,对应的最高位符号位是31位,设置为1        printf("原码为:\n");         Print();//输出原码        for (i = 0; i < 31; i++) arrNum[i] = 1 - arrNum[i]; //除了符号位以外,全部取反        printf("反码为:\n");         Print();//输出反码        arrNum[0] += 1;//反码加一,求出补码        for (i = 0; i <= 31; i++)//进位操作        if (arrNum[i] >= 2)        {            arrNum[i + 1] += arrNum[i] / 2;            arrNum[i] %= 2;        }        printf("补码为:\n");         Print();//输出补码    }    return 0;}

输出结果:
这里写图片描述

3 0
原创粉丝点击