美文网首页十天学会C语言
第06天C语言(04):位运算

第06天C语言(04):位运算

作者: liyuhong | 来源:发表于2017-07-08 12:06 被阅读36次
一、概念
/*
 位运算 (和二进制相关)
 
 1.& 按位与
 规律 : 一假则假, 1真 0假
 规律 : 任何数和 1 相& 得到的结果还是那个数 
        1001 & 1111 = 1001

 2.| 按位或
 规律 : 一真则真

 3.^ 按位异或
 重点 : 异或的结果 和 参与运算的顺序没有关系
 规律1 : 不相同为1, 相同为0 (异或)
         1001 ^ 0101 = 1100
 规律2 : 相同的两个数 异或 等于0
        5 ^ 5 = 0101 ^ 0101 = 0
 规律3 : 任何数 和 0 异或上0 结果不变
        5 ^ 0 = 0101 ^ 0000 = 0101 = 5
 规律4 : 任何一个数 异或上 同一个数两次, 结果不变
        9 ^ 5 ^ 5 = ?  == 9 ^ 0 = 9
 ~ 取反
    计算机是以补码形式存在的
    1.先拿到数 的原码 [进行一个取反] 在 -1 变成反码 再将反码 转为原码
   一 . 9 原码 0000 0000 0000 0000 0000 0000 0000 1001
   二 . 取反的得到补码 -->
       1111 1111 1111 1111 1111 1111 1111 0110 的到的补码
   三 .  再将 补码 -1变成反码 -->
        1111 1111 1111 1111 1111 1111 1111 0101
   四 . 再将反码取反变回原码  --->
        1000 0000 0000 0000 0000 0000 0000 1010 == -10
  ~9 = -10
 
 
 原码 --> 反码(取反) -->(补码)+1
 补码 -->  反码(-1) --> 原码(取反)
 */
二、代码
#include <stdio.h>
int main()
{
#pragma 1.按位与
    /*
     9 & 5 = ?
     1001
    &0101
     ----
    0001
     
     规律 : 任何数和 1 相& 得到的结果还是那个数
     1001
    &1111
     -----
     1001
     */
    printf("1.按位与 %i\n",9 & 5);

#pragma 2.按位或
    /*

     9 | 5 = ?
     1001
   | 0101
     ----
     1101 == 13
     */
    printf("2.按位或 %i\n",9 | 5);

#pragma 3.按位异或
    /*
     规律 : 不相同为1, 相同为0 (异或)
     9 ^ 5 = ?
     
     1001
   ^ 0101
     ----
     1100 == 12
     
     重点 : 异或的结果 和 参与运算的顺序没有关系
     9 ^ 5 ^ 6 = ?
     
     1001
   ^ 0101
     ----
     1100
   ^ 0110
     ----
     1010  == 10
     
     5 ^ 6 ^ 9 = ?
     0101
     0110
     ----
     0011
     1001
     ----
     1010 == 10
     
     规律 : 相同的两个数 异或 等于0
     5 ^ 5 = ?
     6 ^ 6 = ?
     
     0101
     0101
     ----
     0000
     
     
     规律 : 任何数 和 0 异或上0 结果不变
     9 ^ 0 = ?
     
     1001 
     0000
     ----
     1001  == 9
     
     
     规律 : 任何一个数 异或上 同一个数两次, 结果不变
     9 ^ 5 ^ 5 = ?  == 9 ^ 0 = 9
        
     1001
   ^ 0101
     ----
     1100
  ^  0101
     ----
     1001 == 9
     
     
     */
//    printf("3.按位异或 %i\n",9 ^ 5);
    printf("3.按位异或 %i\n",9 ^ 5 ^ 6);
    printf("3.按位异或  同的两个数 异或 等于0 %i\n",5 ^ 5);
    printf("3.按位异或  任何数 和 0 异或上0 结果不变 %i\n",9 ^ 0);
    printf("3.按位异或  任何一个数 异或上 同一个数两次, 结果不变 %i\n",5 ^ 9 ^ 5);
#pragma 4.取反
    /*
     取反
     ~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 (补码转成反码要-1)
     ---------------------------------------
     1111 1111 1111 1111 1111 1111 1111 0101 // 反码
   转成原码(符号位不变,其他取反)
     1000 0000 0000 0000 0000 0000 0000 1010 // 原码
     
     原码 --> 反码(取反) -->(补码)+1
     补码 -->  反码(-1) --> 原码(取反)
     */
    printf("4.取反 %i\n",~11);

    return 0;
}

相关文章

  • 巧妙运用C语言位运算

    巧妙运用C语言位运算,C语言是面向过程的,而C++是面向对象的 位运算 位运算的运算分量只能是整型或字符型数据,位...

  • C语言位运算

    C语言位运算_C语言中文网 C语言位域(位段)_C语言中文网

  • 第06天C语言(04):位运算

    一、概念 二、代码

  • 16_位运算符分析

    关键词: C语言中的位运算符、 左移和右移注意点、位运算防错准则、 位运算符和逻辑运算符的区别 1. C语言中的位...

  • C语言 位运算

    ###位运算的逻辑: 1:(位与)运算符(&):双目操作符,当两个位进行相与时,只有两者都为“1”时结果才为“1”...

  • C语言位运算

    C语言里位运算就是对一个比特(Bit)进行操作,比特(Bit)是计算机的一个电子元件,只有通电和断电两种状态(这也...

  • c语言位运算

  • C语言:按位运算

    C语言:按位运算 C有这些按位运算的运算符& 按位的与| 按位的或~ 按位取反^ 按位的异或<< ...

  • 位运算

    位运算小结(按位与、按位或、按位异或、取反、左移、右移) 位运算不管是在Java语言,还是在C语言中,或者其他语言...

  • 嵌入式C语言的位运算

    想必大家都了解&&(且运算符),||(或运算符),在C语言的位运算中 ,位或运算|,位与运算&,异或^,取反~。等...

网友评论

    本文标题:第06天C语言(04):位运算

    本文链接:https://www.haomeiwen.com/subject/klwdhxtx.html