MINAIot  
  1. 位运算符
    针对二进制数的运算
    (1)位与:&
    对应位都为 1, 则结果为 1

    (2)位或:|
    对应位有 1, 则结果为 1

    (3)位反:~
    按位取反

    计算机时补码存储,原码输出!
    原码:
    正数的原码是其本身
    负数的原码是正数源码的基础上,符号位为 1
    反码:
    正数的反码是其本身
    负数的反码是在其原码的基础上,符号位不变,其余位按位取反
    补码:
    正数的补码是其本身
    负数的补码是在其原码的基础上,符号位不变,其余各位取反然后加 1
    即反码的基础上加 1

    例如:23
    0001 1000 - 1
    23: 0001 0111
    ~23: 1110 1000 (补码) //补码 = 反码 + 1 ===> 反码 = 补码 - 1
    1110 0111 (反码)
    1001 1000 (原码) // -24

    (4)异或:^
    对应位相同则结果为 0,不同为 1

    4 ^ 7 = 3
    0100
    ^0111
    --------
    0011

    5 ^ 3 = 6
    0101
    ^0011
    -------
    0110

    3210
    1111 ----> 1 * 2^0 + 1 * 2^1 + 1 * 2^2 + 1*2^3
    8421 ----> 1 + 2 + 4 + 8

    (5)左移:<<
    将数据左移相应的位数,低位补0, 高位溢出,
    即: 乘以 2^n

    4 << 2 ===> 0100 << 2 ===> 01 0000

    或者 : 4 * 2^2 = 4 * 4 = 16

    (6)右移:>>
    右移相应的位数,即处以 2^n

    0100 >> 2 ===> 0001 ===> 1
    4 >> 2 ===> 4 / 2^2 = 4/4 = 1

    将 123 的第四位置 0

    0000 0000 1000 0000 = 128
    0000 0000 0111 1111 = 127
    0000 0000 0111 1011 = 123

    1111 1111 1111 0111
    0xfff7

    不考虑其他位,只将第四位置 0,(从 0 开始2^0, 2^1, 2^2, 2^3, 2^4)
    123 & (0x0 << 4)

  2. 赋值运算符
    简单赋值运算符:=
    复合赋值运算符:
    +=, -=, *=, /=, %=
    &=, |=, ~=, <<=, >>=

    m += n ===> m = m + n
    m >>= n ===> m = m >> n
    m &= n ===> m = m & n

    左值:
    赋值号左侧的值,仅变量可以作为左值
    表达式的值不可作为左值
    右值:
    赋值号右侧的表达式,变量, 或值,左值,均可作为右值

  3. 运算符的优先级
    括号成员第一,全体单目第二,乘除余三,加减四
    位移五,关系六,等(==)与不等(!=)排第七
    位与,异或和位或八九十
    逻辑与和或十一与十二
    条件(?:)高于赋值,逗号运算最低

    int a = 1,2,3,4,5; //如果逗号运算符高于赋值运算符,则正确编译,a = 5
    int b = 1,2,3,4,5; //如果赋值运算符高于逗号运算符,则无法正确编译
    int c = (12, 34, 56); //OK, c = 56;

  4. 选择结构
    (1)C 语言的三大结构
    顺序结构
    选择结构
    循环结构

(2)if 的使用
a. 基本用法
if(表达式)
{
//代码块,即要执行的代码
}

如果表达式的结果为真,则执行 if 之后 {} 里的内容
否则不执行

b. if~else
if(表达式)
{
//codeBlocks1
}
else
{
//codeBlocks2
}

表达式成立 ,则执行 codeBlocks1
表达式不成立,则执行 codeBlocks2

思考:
输入一个数,判断该数是否是 3 的倍数???
若是则输出该数,否则输出 false

c. if ~ else 的嵌套使用
if(表达式1)
{
//codeBlocks1
if(表达式2)
{
//codeBlocks2
}
//other codeBlock
}
else
{
if(表达式2)
{
//codeBlock3
}
else
{
//codeBlocks4
}
}

posted on 2019-12-08 12:07  MINAIot  阅读(165)  评论(0编辑  收藏  举报