我在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;
我遇到的问题是当我输入例如00111100
和3
时,该程序显然不知道如何使用额外的1
进行操作,我得到了一个错误的答案。
答案 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;