对整数转换成二进制字符串
/* binbit.c -- 使用位操作显示二进制 */
#include <stdio.h>
#include <limits.h>// 提供 CHAR_BIT 的定义,CHAR_BIT 表示每字节的位数
char *itobs(int , char *);
void show_bstr(const char *);
int main(void)
{
char bin_str[CHAR_BIT *sizeof(int) + 1];//每个字节占8位,8X4一共32位,数组字符串最后一位添加‘\0’
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');
}
return 0;
}
char *itobs(int n, char *ps)//使用指针去接受实参传递过来的数组首地址信息
{
int i;
const static int size = CHAR_BIT * sizeof(int);
//大小
for(i = size -1; i >= 0; i--, n >>= 1)
{
ps[i] = (01 & n) + '0';
//我们输入的整数n,在计算机中是以二进制形式存在,只是显示是我们所看到的计算后的结果7
//这里的整数n无需有过多的理解
//‘>>=’: 每次都把右移过的进制作为新的结论
}
ps[size] = '\0'; //数组字符串最后一位添加‘\0’
return ps;
}
void show_bstr(const char *str)
{
int i = 0;
while(str[i])
{
putchar(str[i]);
if(++i % 4 == 0)
{
putchar(' ');
}
}
}
’
’
’
对低四位进行异或操作
/* binbit.c -- 使用位操作显示二进制 */
#include <stdio.h>
#include <limits.h>// 提供 CHAR_BIT 的定义,CHAR_BIT 表示每字节的位数
char *itobs(int , char *);
void show_bstr(const char *);
int main(void)
{
char bin_str[CHAR_BIT *sizeof(int) + 1];//每个字节占8位,8X4一共32位,数组字符串最后一位添加‘\0’
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');
number = invert_end(number, 4);
printf("转换后的数字 :%d\n", number);
printf("将最后4位反转得到:\n");
show_bstr(itobs(number,bin_str));
putchar('\n');
}
return 0;
}
//将整数转换成二进制字符串
char *itobs(int n, char *ps)
{
int i;
const static int size = CHAR_BIT * sizeof(int);
//大小
for(i = size -1; i >= 0; i--, n >>= 1)
{
ps[i] = (01 & n) + '0';
//我们输入的整数n,在计算机中是以二进制形式存在,只是显示是我们所看到的计算后的结果7
//这里的整数n无需有过多的理解
//‘>>=’: 每次都把右移过的进制作为新的结论
}
ps[size] = '\0'; //数组字符串最后一位添加‘\0’
return ps;
}
//获取后四位异或后的值
int invert_end(int num, int bits)
{
int mask = 0;
int bitval = 1;
while(bits-- > 0)
{
mask |= bitval;
bitval <<= 1;
}
return num ^ mask;
}
void show_bstr(const char *str)
{
int i = 0;
while(str[i])
{
putchar(str[i]);
if(++i % 4 == 0)
{
putchar(' ');
}
}
}