运算符

递增运算符与递减运算符

前缀模式:++a
后缀模式:a++
在表达式中,前缀模式是先将a递增再进行表达式运算
后缀模式是进行完表达式运算后再递增
只有圆括号的优先级比它们高

sizeof运算符

获取右侧运算对象的大小,右侧运算对象可以是变量名、数组名,也可以是类型说明符,如sizeof(float)
返回值是sizet类型,无符号整数类型,作为unsigned int 或unsigned long 的别名,在使用时编译器会根据不同的系统替换标准类型。
Syntax
sizeof (type) (1)
sizeof
expression (2)
1) Yields the size in bytes of the object representation of _type
.
2) Yields the size in bytes of the object representation of the type of expression, if that expression is evaluated.

类型转换

类型级别

long double > double > float > unsigned long long > long long > unsigned long > long > unsigned int > int
涉及两种类型的运算时,两个值会分别转换成两种类型的更高级别

赋值表达式中的问题

赋值表达式中,计算的最终结果会被转换成被赋值变量的类型,导致可能出现降级。
待赋的值与目标类型不匹配时,有规则:

  1. 目标类型是无符号整型,待赋的值是整数,则额外位将被忽略。

e.g. 目标类型:unsigned char(八位) 待赋的值:原始值%256

  1. 目标类型是有符号整型,待赋的值是整数,结果因实现而异
  2. 目标类型是整型,待赋的值是浮点数,行为未定义,浮点值会被截断

    强制类型转换

    int mice = 1.6 + 1.7;
    采用自动类型转换,将3.3截断为整数3赋值给mice

int mice = (int)1.6 + (int)1.7;
采用强制类型转换,mice = 1 + 1