码迷,mamicode.com
首页 > 其他好文 > 详细

反转一个值中的最后n位

时间:2014-11-02 22:17:41      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   使用   for   sp   strong   

  这是在《使用位运算显示二进制数》的基础上进一步扩展,实现反转一个值中最后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位

标签:style   blog   io   color   ar   使用   for   sp   strong   

原文地址:http://www.cnblogs.com/anthozoan77/p/4070041.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!