@RayChen
2016-12-09T00:54:02.000000Z
字数 1051
阅读 1472
将数字转换为char类型
0+'0'='0'
1+'0'='1'
四种位的开闭方式
0 & 任意数 = 0
1 | 任意数 = 1
1 & n = n
0 | n = n
#include <stdio.h>
#include <limits.h>// 提供 CHAR_BIT 的定义,CHAR_BIT 表示每字节的位数
// CHAR_BIT是包含在头文件<limits.h>中的宏定义,就是字节的最小位数,应该等于8
char *itobs(int n, char * ps)
// itobs 函数将整数转换成二进制字符串
{
int i;
// static变量,运行时只暂时存在的自动变量(即局部变量)
const static int size = CHAR_BIT * sizeof(int);
// 循环执行i--和n >>= 1。i--移动到数组的前一个元素,n >>= 1使n中的所有位向右移动一个位置。进入下一轮迭代时,循环中处理的是n中新的最右端的值。然后,把该值储存在倒数第3个元素中,以此类推。itobs()函数用这种方式从右往左填充数组。
for (i = size - 1 ; i >= 0; i--, n >>= 1)
ps[i] = (01 & n) + '0';
// ↑ 01是一个八进制的掩码
//用01 & n和1 & n都可以,我们用八进制而不是二进制是为了更接近计算机的表达方式
ps[size] = '\0';
return ps;
}
// 4位一组显示二进制字符串
void show_bstr(const char * str)
{
int i = 0;
while (str[i])
{
putchar(str[i]);
// 每4位打印一个空格
if (++i % 4 == 0 && str[i])
putchar(' ');
}
return;
}
int main(void)
{
char bin_str[CHAR_BIT * sizeof(int) + 1];
// +1是为了留一个位置储存末尾的空字符
int number;
puts("Enter integers and see them in binary.");
puts("Non-numeric input terminates program.");
while (scanf("%d", &number) == 1)
{
itobs(number, bin_str);
printf("%d is", number);
show_bstr(bin_str);
putchar('\n');
}
puts("Bye!");
return 0;
}