C和指针前六章小结值第五章~操作符和表达式

          移位操作符: 标准说明无符号值执行的所有移位操作都是逻辑移位(逻辑右移填充零),但对于有符号的值,到底是采用逻辑意味还是算树意味取决于编译器。因此一个程序如果使用了有符号数的右移位操作,它就是不可移植的。(自己用的gcc右移是有符号的,左边填充1)。

        赋值: 只要允许出现表达式的地方,都允许进行赋值。 赋值操作符把右操作数的值存储於左操作数指定的位置。赋值也是个表达式,表达式就具有一个值。赋值表达式的值就是左操作数的新值,它可以作为其他赋值操作符的操作数。自己对左值的理解就是左值必须提供一个允许存放右值地址。  

        sizeof: 判断操作数的类型长度,以字节为单位。操作数可以是个表达式,也可以是加上括号的类型名。 当sizeof 的操作数是数组名时,它返回的是数组的长度,以字节为单位。判读表达式的长度并不需要对表达式进行求值,所以sizeof(a=b+1)并没有向a赋任何值。

        ++ -- : 这两个操作符实际只要求操作数是一个“左值”。这些操作符的结果不是被它们所修改的变量,而是变量的值的拷贝。所以++a=10;是错误的表达式。++a的结果是a值的拷贝,并不是变量本身,你无法向一个值进行赋值。

       逗号操作符: 逗号操作符将两个或多个表达式分隔开来。这些表达式自左向右逐个进行求值,整个逗号表达式的值就是最后那个表达式的值。

       优先级: 优先级只对相邻操作符的执行顺序起作用。好比(a*b) + (c*d) + (e*f),并不清楚那个乘法运算先进行。 "c + --c ",标准说明类似这种表达式是未定义的。这样的表达式是不可移植的。像g() + f() + h(),各个函数的调用顺序规则未加以限制。如果他们执行一些I/O任务或修改全局变量,那么结果会可能不同。因此最好让每个函数单独的语句执行: temp = g(); temp += f(); temp += h();

你可能感兴趣的:(C和指针前六章小结值第五章~操作符和表达式)