通過移位演算法10進制轉2進制
C語言實作
代碼參考
C Primer Plus第15章 位操作編程書后實體,修改而來
代碼如下
#include <stdio.h>
#include <limits.h> //提供CHAR_BIT宏定義
char *itobs(long long int number, char *string);
void showBits(const char *string);
int main(int argc, char const *argv[])
{
// CHAR_BIT是一個宏定義,定義了一個位元組對應的位大小
char bin_str[CHAR_BIT * sizeof(long long int) + 1]; // 宣告了一個臨時的陣列,用來存放字符1,字符0,因為最后還有一個'\0',所以 + 1
long long int number;
puts("Please input long long int type number!,Another character to leave!");
while ((scanf("%lld", &number) & 01) == 1)
{
itobs(number, bin_str);
showBits(bin_str);
}
puts("bye!");
return 0;
}
/**
* @description 傳入一個數字,和一個規定長度的字串,向字串中填充數字的二進制字符并回傳
* @param number 傳入的long long int 型別資料
* @param string 規定長度的(空)字串,長度為 CHAR_BIT * sizeof(long long int) + 1 (+1為放置'\0')
* @return string 回傳填充好傳入引數'string' 的二進制字符陣列,可用于列印
*/
char *itobs(long long int number, char *string)
{
const static long long int size = CHAR_BIT * sizeof(long long int); // 得到long long int的位大小
for (long long int i = size - 1; i >= 0; i--, number >>= 1) //這里必須為 >>=,也可以是 number = number >> 1; 得到的數字從后往前排序
{
string[i] = (number & 1) + '0'; //這里 & 1(或者 & 01(八進制1)),01為掩碼,將其他的(除了0號位的位)置0.得到的結果是數1/0,加上字符'0'得到字符'1'/'0'
}
string[size] = '\0';
return string;
}
/**
* @description 用于列印陣列中寫好的二進制的字符 (4個為一組)
* @param string 傳入的字串
* @return void
*/
void showBits(const char *string)
{
long long int i = 0;
while (string[i])
{
putchar(string[i]);
if (++i % 4 == 0 && string[i])
{
putchar(' ');
}
}
putchar('\n');
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/404281.html
標籤:其他
