C 十进制输入上的二进制操作

C 十进制输入上的二进制操作,c,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

我正在为一个学校项目用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;
案例1:
printf_s(“按以下格式输入二进制数和十进制移位:8位dec\n”);
扫描频率(“%u%u”、&b1和b2);
/*二进制到十进制的转换*/
结果1=(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(“\n结果是%u\n”),result1您似乎对“可以”使用的内容有各种奇怪的限制,这使得这是一场猜测比赛

无论如何,要将十进制数限制为特定位数,可以使用模:

b1 %= 100000000;

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

这些人工要求除了教您坏习惯之外,没有其他用途。在实际应用程序中,您可以将输入读取为字符串,这将是最方便和安全的格式。然后使用循环或
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;
//不要在现实世界中编写这样的代码
#包括
#包括
#包括
uint32_t wannabe_二进制;
uint32实际二进制=0;
uint32_t班次;
printf(“按以下格式输入二进制数和十进制移位:8位dec\n”);
scanf(“%”SCNx32“%”SCNd32,&wannabe_二进制,&shift);

实际\u binary+=(wannabe\u binary&0x10000000)?1您需要学习循环的概念并将其应用到您的案例中。我不能使用循环,该片段只允许if/else和switchloop创建一个结果,每个循环对结果做“某事”。例如,字符串中的25是2*10+5,253是25*10+3