在C中,是否将变量/值类型转换为一元运算?
要添加到这个是类型化整数值(可能在你应用掩码之前)也是一元操作?让我说我有
((uint64_t)1 << 30 & 0xFFFF0000FFFF0000LL)
Run Code Online (Sandbox Code Playgroud)
1填充零(最多64位),然后移位?
逻辑上,是的,将它视为一元运算符是合理的,因为它需要一个操作数.
但是如果你看一下C标准对表达式进行分类的方式,第6.5.3节将介绍一元运算符,并在第6.5.4节中单独描述了强制运算符.
实际上至少有一种区别很重要.
sizeof 单目expresson
是一元表达的几种形式之一.如果一个强制转换操作符(type-name)被视为像其他操作符一样的一元操作符,那么:
sizeof (int) 42
Run Code Online (Sandbox Code Playgroud)
将是一个有效的一元表达式:42将成为转换运算符的操作数,而后者又是sizeof一元运算符的操作数.但实际上这是一个语法错误(因为sizeof (int)它本身就是一个有效的表达式).为了避免这个问题,一元运算符和强制转换运算符是分开定义的(实际上给出了不同的优先级).要在避免语法错误的同时编写上述内容,您需要添加括号:
sizeof ((int) 42)
Run Code Online (Sandbox Code Playgroud)
参考:N1570,2011 ISO C标准的最新免费草案.