是什么类型的操作?

OfL*_*ers 3 c

在C中,是否将变量/值类型转换为一元运算?

要添加到这个是类型化整数值(可能在你应用掩码之前)也是一元操作?让我说我有

((uint64_t)1 << 30 & 0xFFFF0000FFFF0000LL)
Run Code Online (Sandbox Code Playgroud)

1填充零(最多64位),然后移位?

Kei*_*son 6

逻辑上,是的,将它视为一元运算符是合理的,因为它需要一个操作数.

但是如果你看一下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标准的最新免费草案.