2017-04-12 11 views
-1

私は学校プロジェクトのためにCでバイナリ電卓を作成していますが、正しい答えを得ることができません。小数点入力のバイナリ演算

私は、符号なし整数をユーザーから読み込み、印刷できないので、バイナリ入力を10進数に変換する変数を作成し、その10進数に演算子を適用します。

コード:

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

私はループを使用することはできません、asigmentはif/elseとスイッチ – user7792712

+0

のループだけを許可し、すべてのループが結果に「何か」をする結果を作成します。 Ex。文字列の25は2 * 10 + 5、253は25 * 10 + 3です – Nish

答えて

0

あなたが「使用できる」ものにはさまざまな奇妙な制限があるようですが、これは推測コンテストになります。とにかく

、桁の一定数にあなたの小数点以下の数を制限するために、あなたは剰余を使用することができます。

b1 %= 100000000; 

これは、あなたが、その後として解釈できる8桁にそれを制限し、10,000,000を超える任意の部分を削除しますバイナリビット。

0

これらの人工的な要件は、他の目的ではなく、悪い習慣を教えるためのものです。実際のアプリケーションでは、入力を文字列として読み込みますが、これは最も便利で安全な形式です。ループまたはstrtolを使用します。

これは、符号なし整数を16進数として読み取ることができ、要件に矛盾しないことを示しています。それはやや不条理な仕事になります。その後、16進数の各桁をマスクし、実際のバイナリに変換します。

// 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; 
関連する問題