@RayChen
2016-12-08T16:54:02.000000Z
字数 1051
阅读 1614
将数字转换为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>中的宏定义,就是字节的最小位数,应该等于8char *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;}