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('\n'); 29 30 number = invert_end(number, 4); 31 32 printf("Inverting the last 4 bits gives\n"); 33 34 show_bstr(itobs(number, bin_str)); 35 36 putchar('\n'); 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] = '\0'; 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 }
第 15 章 位操作(invert4)
猜你喜欢
转载自www.cnblogs.com/web1013/p/9207481.html
今日推荐
周排行