[英]converting decimal number to binaric
我寫了一個將十進制整數轉換為二進制的代碼。 我試圖讓它打印所有數字,直到給出的數字,而不是每次打印完全相同的數字。 例如,對於 input = 3,它將以二進制形式打印 0,1,2,3。 這是我的代碼:
printf("Please enter an integer number\n");
scanf_s("%d", &n);
for (i = 0; i < n; i++)
{
printf("%d == ", n);
for (c = 5; c >= 0; c--)
{
k = n >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf("\n");
}
system ("pause");
return 0;
謝謝你們!
你需要在循環中使用 i,而不是 n
#include "stdio.h"
int main()
{
int c,k,n,i = 0;
printf("Please enter an integer number\n");
scanf_s("%d", &n);
for (i = 0; i < n; i++)
{
printf("%d == ", i);
for (c = 5; c >= 0; c--)
{
k = i >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf("\n");
}
return 0;
}
您也可以簡單地使用putchar()
輸出單個字符,無需調用可變參數printf
來輸出格式字符串中的固定字符(盡管一個好的編譯器可能會為您進行優化。
你可以做類似的事情:
#include <stdio.h>
#include <limits.h>
int main (void) {
unsigned n;
fputs ("enter an integer number: ", stdout);
if (scanf ("%u", &n) == 1) {
for (unsigned i = 0; i < n; i++) {
printf ("%d == ", i);
for (unsigned s = 0; s < sizeof s * CHAR_BIT; s++)
putchar ((i >> (31 - s)) & 1u ? '1' : '0');
putchar ('\n');
}
}
}
示例使用/輸出
$ ./bin/binslessthann
enter an integer number: 10
0 == 00000000000000000000000000000000
1 == 00000000000000000000000000000001
2 == 00000000000000000000000000000010
3 == 00000000000000000000000000000011
4 == 00000000000000000000000000000100
5 == 00000000000000000000000000000101
6 == 00000000000000000000000000000110
7 == 00000000000000000000000000000111
8 == 00000000000000000000000000001000
9 == 00000000000000000000000000001001
(當然,對於小數來說,不需要完整的 32 位,但為了完整起見,它們被包含在內)
未填充的二進制表示
如評論中所述,未填充的版本使結果更易於閱讀。 (引用是“可怕的前導零”)要輸出未填充的版本,您可以簡單地先檢查值是否為零,如果是,則簡單地輸出零,對於存在一個位的值,您檢查值中是否保留了一個位移位后,如果是,繼續輸出位,否則不再輸出任何內容,例如
int main (void) {
unsigned n;
fputs ("enter an integer number: ", stdout);
if (scanf ("%u", &n) == 1) {
for (unsigned i = 0; i < n; i++) {
printf ("%d == ", i);
if (!i)
putchar ('0');
else {
unsigned s = sizeof s * CHAR_BIT;
while (s--) {
unsigned remain = i >> s;
if (remain)
putchar ((i >> s) & 1u ? '1' : '0');
}
}
putchar ('\n');
}
}
}
示例使用/輸出
$ ./bin/binslessthanrem
enter an integer number: 10
0 == 0
1 == 1
2 == 10
3 == 11
4 == 100
5 == 101
6 == 110
7 == 111
8 == 1000
9 == 1001
仔細檢查一下,如果您還有其他問題,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.