定义

掩码掉一些东西,留下一些东西就是掩码存在的意义

掩码 - 图1

  1. unsigned char MASK = 1 << 1;
  2. unsigned char flag = 0x96;

功能

  1. 打开位 (某一位置1) (flag |= mask)
  2. 关闭位 (某一位置0) (flag &= ~mask)
  3. 转置位 (某一位反转) (flag ^= mask)
  4. 查看某一位的值 if((flag & mask))

生成

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. void binDis2(int data) {
  4. int i = 8;
  5. while (i--)
  6. {
  7. if (data & (1 << i)) {
  8. printf("1");
  9. }
  10. else {
  11. printf("0");
  12. }
  13. if (i % 4 == 0) {
  14. printf(" ");
  15. }
  16. }
  17. printf("\n");
  18. }
  19. int main() {
  20. int mask = 0;
  21. /*
  22. int mask = (1<<6) | (1<<5) | (1<<4) | (1<<3) | (1<<2)
  23. 0100 0000
  24. 0110 0000
  25. 0111 0000
  26. 0111 1000
  27. 0111 1100
  28. 0111 1100
  29. */
  30. for (int i = 6; i >= 2; i--) {
  31. mask |= (1 << i);
  32. binDis2(mask);
  33. }
  34. system("pause");
  35. return 0;
  36. }

功能代码

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. void binDis2(int data) {
  4. int i = 8;
  5. while (i--)
  6. {
  7. if (data & (1 << i)) {
  8. printf("1");
  9. }
  10. else {
  11. printf("0");
  12. }
  13. if (i % 4 == 0) {
  14. printf(" ");
  15. }
  16. }
  17. printf("\n");
  18. }
  19. // 4. 查看某一位的值 if((flag & mask))
  20. //要想操作位先求mask
  21. void viewSomeBitValue() {
  22. int a = 0x55aa; // 0101 0101 1010 1010
  23. int mask = 1 << 6; // 0000 0000 0100 0000
  24. // & 两个位都为1时,结果才为1
  25. if (a & mask) { // 左移6位,从上面可以看出&的时候,是0,左移7位 是1
  26. printf("leds is on");
  27. }
  28. else {
  29. printf("leds is off");
  30. }
  31. }
  32. void bitSetNegate() { // 取反
  33. int a = 0x55aa; // 0101 0101 1010 1010 0101 0101 0101 0101
  34. // 0000 0000 1111 1111
  35. // 0101 0101 0101 0101
  36. // 1<<7 0000 0000 1000 0000
  37. int mask = 1 << 7 | 1 << 6 | 1 << 5 | 1 << 4 | 1 << 3 | 1 << 2 | 1 << 1 | 1 << 0;
  38. binDis(a);
  39. //^两个位相同为0,相异为1
  40. a ^= mask;
  41. binDis(a);
  42. }
  43. void bitSetOne() { //置1 将0x55aa 二进制11位置1
  44. int a = 0x55aa; // 0101 0101 1010 1010 0101 1101 0101 0101
  45. int mask = 1 << 11; // 0000 1000 0000 0000
  46. a = a | mask;
  47. binDis(a);
  48. }
  49. void bitSetZero() { //将0101 0101 1010 1010倒数第3位置0
  50. int a = 0x55aa; // 0101 0101 1010 1010 0101 0101 1010 1010
  51. int mask = 1 << 3; // 0000 0000 0000 1000 ~1111 1111 1111 0111
  52. // 结果 &0101 0101 1010 0010
  53. binDis(a);
  54. a = a & (~mask);
  55. binDis(mask);
  56. binDis(~mask);
  57. binDis(a);
  58. }
  59. int main() {
  60. int mask = 0;
  61. for (int i = 6; i >= 2; i--) {
  62. mask |= (1 << i);
  63. //binDis2(mask);
  64. }
  65. //viewSomeBitValue();
  66. //bitSetOne();
  67. bitSetZero();
  68. system("pause");
  69. return 0;
  70. }