十进制输入上的二进制运算

时间:2017-04-12 09:59:39

标签: c

我在C学校为学校项目创建了一个二进制计算器,但我无法得到正确的答案。

我只能从用户读取和打印无符号整数的赋值细节,并且我不能使用循环,所以我创建了一个将二进制输入转换为十进制的变量,然后我对这些十进制数应用运算符。

代码:

case 1:
        printf_s("Input a binary number and decimal shifting in the following format: 8-bit dec\n");
        scanf_s("%u %u", &b1, &b2);
        /*conversion of binary to decimal*/
        result1 = (b1 % 10) + (b1 / 10 % 10) * 2 + (b1 / 100 % 10) * 4 + (b1 / 1000 % 10) * 8 + (b1 / 10000 % 10) * 16 + (b1 / 100000 % 10) * 32 + (b1 / 1000000 % 10) * 64 + (b1 / 10000000 % 10) * 128;

        printf_s("\nThe result is %u\n", result1 << b2);
        break;

我遇到的问题是当我输入例如001111003时,该程序显然不知道如何使用额外的1进行操作,我得到了一个错误的答案。

2 个答案:

答案 0 :(得分:0)

你似乎对你可以&#34;可以&#34;有什么奇怪的限制。使用,这使得这是一场猜谜比赛。

无论如何,要将十进制数限制为一定数量的数字,可以使用modulo:

b1 %= 100000000;

这将删除超过10,000,000的任何部分,将其限制为8位十进制数,然后您可以将其解释为二进制位。

答案 1 :(得分:0)

这些人为的要求除了教你不良习惯外别无其他目的。在实际应用程序中,您将输入作为字符串读取,这将是最方便和安全的格式。然后使用循环或strtol

话虽这么说,你可以将无符号整数读成十六进制,这与要求并不矛盾。这会使任务略显荒谬。然后屏蔽十六进制的每个数字并转换为实际的二进制数。

// don't write code like this in the real world
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

uint32_t wannabe_binary;
uint32_t actual_binary = 0;
uint32_t shift;

printf("Input a binary number and decimal shifting in the following format: 8-bit dec\n");
scanf("%"SCNx32 "%"SCNd32, &wannabe_binary, &shift);

actual_binary += (wannabe_binary & 0x10000000) ? 1<<7 : 0;
actual_binary += (wannabe_binary & 0x01000000) ? 1<<6 : 0;
actual_binary += (wannabe_binary & 0x00100000) ? 1<<5 : 0;
actual_binary += (wannabe_binary & 0x00010000) ? 1<<4 : 0;
actual_binary += (wannabe_binary & 0x00001000) ? 1<<3 : 0;
actual_binary += (wannabe_binary & 0x00000100) ? 1<<2 : 0;
actual_binary += (wannabe_binary & 0x00000010) ? 1<<1 : 0;
actual_binary += (wannabe_binary & 0x00000001) ? 1<<0 : 0;