首页 > 代码库 > 反转一个值中的最后n位
反转一个值中的最后n位
这是在《使用位运算显示二进制数》的基础上进一步扩展,实现反转一个值中最后n位,参数为n和要反转的值。
~可以一个字节中所有的位,而不是选定的少数位。为达到指定要求,需创建一个掩码,该掩码最后n位设为1,其余的位设为0。然后,对该掩码和一个值使用^运算就可以转置这个值得最后n位,同时保留该值的其他位不变。
1 //使用位操作符来显示二进制并翻转该值的最后n位 2 #include<stdio.h> 3 char *itobs( int, char*); //integer to binary string 4 void show_bstr( const char*); 5 int invert_end(int, int); //关键算法 6 main() 7 { 8 char bin_str[8 * sizeof(int) +1]; 9 int number;10 int n;11 while(scanf("%d", &number)==1)12 {13 itobs( number, bin_str);14 printf("%d is \n", number);15 show_bstr( bin_str);16 putchar(‘\n‘);17 puts("Enter an integer you want to invert:");18 scanf("%d", &n);19 number=invert_end(number, n);20 printf("%Inverting the last %d bits gives\n", n);21 show_bstr(itobs(number, bin_str));22 putchar(‘\n‘);23 }24 }25 char *itobs( int n, char *ps)26 {27 int i;28 static int size = 8 * sizeof(int);29 for( i=size-1; i>=0; i--, n>>=1)30 ps[i]=(1&n)+‘0‘; //01&n就是n的最后一位的值(1&n也行),该值为0或1。字符数组需要字符‘0‘或‘1‘,加上‘0‘的ASCII编码可以完成转换31 ps[size]=‘\0‘;32 return ps;33 }34 //四位一组显示二进制字符串35 void show_bstr(const char *str)36 {37 int i=0;38 while(str[i])39 {40 putchar(str[i]);41 if(++i%4==0 && str[i])42 putchar(‘ ‘);43 }44 }45 int invert_end(int num, int bits)46 {47 int mask = 0;48 int bitval = 1;49 while( bits-->0)50 {51 //mask|=bitval; 52 //bitval<<=1;53 mask|=1;mask<<=1; //若用注释语句,则需注释本句54 }55 mask>>=1; //若用注释语句,则需注释本句56 return num^mask;57 }
反转一个值中的最后n位
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。