第 15 章 位操作(invert4)

 1 /*------------------------------------
 2     invert4.c -- 使用位操作显示二进制
 3 ------------------------------------*/
 4 
 5 #include <stdio.h>
 6 #include <limits.h>        //提供 CHAR_BIT 的定义,CHAR_BIT 表示每字节的位数
 7 
 8 char* itobs(int, char*);
 9 void show_bstr(const char*);
10 int invert_end(int num, int bits);
11 
12 int main()
13 {
14     char bin_str[CHAR_BIT * sizeof(int) + 1];
15     int number;
16 
17     puts("Enter integers and see them in binary.");
18     puts("Non-numeric input terminates program");
19 
20     while (scanf("%d", &number) == 1)
21     {
22         itobs(number, bin_str);
23         
24         printf("%d is ", number);
25 
26         show_bstr(bin_str);
27 
28         putchar('
');
29 
30         number = invert_end(number, 4);
31 
32         printf("Inverting the last 4 bits gives
");
33 
34         show_bstr(itobs(number, bin_str));
35         
36         putchar('
');
37     }
38 
39     puts("Bye");
40 
41     return 0;
42 }
43 
44 char* itobs(int n, char *ps)
45 {
46     const static int size = CHAR_BIT * sizeof(int);
47 
48     for (int i(size - 1); i >= 0; --i, n >>= 1)
49         ps[i] = (01 & n) + '0';
50     
51     ps[size] = '';
52 
53     return ps;
54 }
55 
56 //以4位为一组,显示二进制字符串
57 void show_bstr(const char *str)
58 {
59     int i = 0;
60     while (str[i])        //不是空字符
61     {
62         fputc(str[i], stdout);
63 
64         if (++i % 4 == 0 && str[i])
65             fputc(' ', stdout);
66     }
67 }
68 
69 int invert_end(int num, int bits)
70 {
71     int mask = 0;
72     int bitval = 1;
73 
74     while (bits-- > 0)
75     {
76         mask |= bitval;
77         bitval <<= 1;
78     }
79 
80     return num ^ mask;
81 }
invert4.c

原文地址:https://www.cnblogs.com/web1013/p/9207481.html