C语言位运算--将整数转换成二进制串以及反转整数后N位


// c primer plus上的内容,位运算
#include <stdio.h>
char * itobs (int n,char * ps);
void show_bstr(const char *);
int invert_end(int num,int bits);
int main(void){
char bin_str[8*sizeof(int)+1];
int number;
puts("Enter integers and see them in binary.");
puts("Non-numberic input terminates program.");
while(scanf("%d",&number)==1){
itobs(number,bin_str);
printf("%d is \n",number);
show_bstr(bin_str);
putchar('\n');
number = invert_end(number,4);
printf("Inverting the last 4 bits gives\n");
show_bstr(itobs(number,bin_str));
putchar('\n');
}
return 0;
}

//整数转换成二进制串
char* itobs(int n,char * ps){
int i;
static int size = 8 * sizeof(int);
for(i=size-1;i>=0;i--,n >>=1)
ps[i]=(01 & n) + '0';
ps[size]='\0';
return ps;
}

//4位一组显示二进制字符串
void show_bstr(const char * str){
int i=0;
while(str[i]){
putchar(str[i]);
if(++i %4 ==0 && str[i])
putchar(' ');
}
}

//反转数最后N位
int invert_end(int num,int bits){
int mask=0;
int bitval=1;
while(bits-->0){
mask |=bitval;
bitval <<=1;
}
return num^mask;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值