バイナリcコードに負の10進数を書き込むことができません。助けが必要です:)これが私のコードです......他のインクルードは必要ありません。
#include <stdio.h>
int main(void){
int i;
int j;
int b[16];
printf("input number");
scanf("%d",&i);
if(i <= 0) {
// here is negative decimal code
} else {
for(j=15;j>=0;j--) {
b[j] = i % 2;
i = i / 2;
}
for (j=0;j<=15;j++)
printf("%d", b[j]);
printf("\n");
}
return 0;
}
符号付き整数を2進数として出力するには、2で繰り返し除算します。幅が16であると想定したり、2の補数を使用したりする必要はありません。>>
シフトを使用すると、実装で定義された動作が発生します。
#include <stdio.h>
#include <stdbool.h>
void print2_helper(int x) {
bool isodd = x%2;
x /= 2;
if (x) print2_helper(x);
putchar('0' + isodd);
}
void print2(int x) {
printf("Decimal:%d\tBinary:", x);
if (x < 0) putchar('-');
print2_helper(x);
putchar('\n');
}
int main(void){
print2(0);
print2(1);
print2(-1);
print2(2);
print2(-2);
print2(INT_MAX);
print2(INT_MIN);
return 0;
}
出力。
Decimal:0 Binary:0
Decimal:1 Binary:1
Decimal:-1 Binary:-1
Decimal:2 Binary:10
Decimal:-2 Binary:-10
Decimal:2147483647 Binary:1111111111111111111111111111111
Decimal:-2147483648 Binary:-10000000000000000000000000000000
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加