C语言day06-04位运算

pragma mark 位运算

pragma mark 概念

/**
 *  位运算是指按照二进制进行的运算,在系统软件中,常常需要处理二进制位的问题,C语言提供了6个位操作运算符,这些运算符只能用于整型操作数,即只能用于带符号或无符号的char、short、int与long类型
 *
 */

pragma mark 代码

#include <stdio.h>
int main()
{
    /**
     & 按位与
     | 按位或
     ^ 按位异或
     ~ 取反
     */
#pragma mark  位运算与
    /*
      按为与 &
      规则
     9 & 5 = ?
     
     1001
    &0101
    -----
     0001   // 二进制 1
     
     规律: 任何数和1相&等到的结果还是那个数
     1001
    &1111
    -----
     1001
     */
    printf("%i\n",9 & 5);
    
#pragma mark  位运算或
    /*
     按位或 |
     规律: 一真则真
     9 | 5 = ?
     
     1001
    |0101
    -----
     1101 = 13
     
     */
    printf("%i\n",9 | 5);

#pragma mark  位运算异或 (异:不相同)
    /*
     按位异或 ^
     规律:不相同为1,相同为0
     9 ^ 5 = ?
     
     1001
    ^0101
    -----
     1100  == 12
     
     printf("%i\n",9 ^ 5);
     重点:
     规律: 异或的结果和参与运算的顺序没有关系
     9 ^ 5 ^ 6 = ?
     
     1001
    ^0101
     ----
     1100
    ^0110
     ----
     1010 == 10
     
     5 ^ 6 ^ 9 = ?
     0101
    ^0110
     ----
     0011
    ^1001
     ----
     1010 == 10
     printf("%i\n",5 ^ 9 ^ 6);

     规律: 相同的两个数异或等于0
     5 ^ 5 = ?
     6 ^ 6 = ?
     
     0101
    ^0101
     -----
     0000
     
     0110
    ^0110
     -----
     0000
     
     规律 : 任何一个数异或上0结果不变
     9 ^ 0 = ?
     5 ^ 0 = ?
     
     1001
    ^0000
     -----
     1001 == 9
     
     0101
    ^0000
     -----
     0101 == 5

     
     9 ^ 5 ^ 5 = ?
     5 ^ 9 ^ 5 = 9 ^ 5 ^ 5 == 9 ^ 0 == 9
     规律: 任何一个数异或上同一个数两次,结果不变
     
     1001
    ^0101
     ----
     1100
    ^0101
     ----
     1001 == 9
     */
    printf("%i\n",5 ^ 9 ^ 6);
#pragma mark  位运算取反
    
    /*
     取反 ~
     ~9 = ?
     
     0000 0000 0000 0000 0000 0000 0000 1001
    ~1111 1111 1111 1111 1111 1111 1111 0110 // 补码 需要 转成反码 再原码
    -0000 0000 0000 0000 0000 0000 0000 0001
     ----------------------------------------
     1111 1111 1111 1111 1111 1111 1111 0101  // 反码
     1000 0000 0000 0000 0000 0000 0000 1010  // 补码
     
     原码 --> 反码(取反) --> 补码(+1)
     补码 --> 反码(-1)  --> 原码取反
     */
#pragma mark  位运算与
#pragma mark  位运算与

    return 0;
}

    原文作者:liyuhong165
    原文地址: https://www.jianshu.com/p/043bc3c5a01b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞