• C和指针第五章操作符和表达式


    • 位操作

    把指定的位设置为1

    value=value | 1<<bit_number;

    把指定的位清零

    value= value & ~(1<<bit_number);

    • 操作符的优先级

     两个相邻操作符的执行顺序由它们的优先级决定,如果优先级相同,它们的执行顺序由他们的结合性决定,除此之外,编译器可以自由决定使用任何顺序对表达式进行求值,只要他们不违背逗号,&&,||和?:操作符所施加的限制。如c + --c;将会产生歧义,操作符的优先级要求自减运算在加法运算之前进行,但没有办法得知做操作数是在右操作数之前还是之后进行求值。

    赋值操作符的结合性(求值的顺序)是从右到左;

    if(x+y+1>0)的结果取决于先计算x+y还是y+1,因为如果x+y的结果大于整型所能容纳的值,它就会产生溢出,在两种情况下溢出的地点不同。

    int的精度比float高,float型值仅要求6位数字的精度

    • 左值和右值

    左值意味着一个位置,右值意味着一个值,b + 25 =a;b+25并不能做左值,因为它并未标志一个特定的位置,因此这条赋值语句是非法的。

     左值是内在位置,右值是某位置内的值

    • 移位操作

    左移操作:值最左边的位被丢弃,右边多出来的位由0补齐。

    右移操作分逻辑移位和算术移位,逻辑移位左边移入的位用0填充,算术移位左边移入的位由原先该值的符号位决定,符号位为1则移入的位均为1,符号位为0则移入的位均为0.

    一个程序如果使用了有符号位的右移操作,那么程序是不可移植的。

     sizeof(x):判断表达式的长度,判断表达式的 长度并不对表达式进行求值,例如sizeof(a=b+1)并没有向a赋任何值。

    • 自增和自减

    c=a++;

    d=++b;

    抽象的说,前缀和后缀形式的增值操作符都复制一份变量值的拷贝,用于周围表达式的值正是这份拷贝。前缀操作在进行复制之前增加变量的值,后缀操作在进行复制之后才增加变量的值。

    如++a=10;这条语句是错误的,主要是++a是a值的拷贝,并不是变量本身,无法向一个值进行赋值。

    • 下标引用

    array[下标]

    *(array+(下标))

    下标引用实际上是以后面这种形式实现的。

  • 相关阅读:
    SQLI DUMB SERIES-12
    SQLI DUMB SERIES-11
    SQLI DUMB SERIES-9&&10
    SQLI DUMB SERIES-8
    SQLI DUMB SERIES-7
    XXS level10
    XXS level9
    XXS level8
    XXS level7
    XXS level6
  • 原文地址:https://www.cnblogs.com/sanshuiyijing/p/3029671.html
Copyright © 2020-2023  润新知