什么(1u&lt; <x << y)是什么意思?=“”

时间:2017-01-02 12:17:38

标签: c

=“”

我有一个问题,

1U << 0 = 1

1U << 1 = 2

1U << 2 = 4   

等......好吧..

例如

;

1u<<1<<2 

你能告诉我这个意思吗?

2 个答案:

答案 0 :(得分:2)

由于<< 1 是左关联 2 ,这是     1U<<1<<2 = 2<<2 = 8U

1:Biwise shift left
2: associativity 表示应用表达式中具有相同优先级的运算符的顺序。
注意:对带符号的参数进行位移操作的结果给出了实现定义的结果,因此理论上1U<<x1<<x 更具可移植性

答案 1 :(得分:1)

运算符优先级规则指示如何解析在同一行上具有多个操作数的C表达式。这是C语言的一个混乱部分,因此operator precedence table是理解的有用工具。

在这种情况下,有两个<<运算符具有相同的优先级,因此该组操作数的运算符关联性指示如何解析表达式。它对于移位运算符是从左到右的,这意味着表达式保证被解析为(1u<<1)<<2

换句话说,它与写1u << 3完全相同。

u后缀保证整数常量1是无符号类型。如果我们只输入1,则此整数常量1的类型为int,即signed。这本来是不好的,因为对有符号整数类型执行移位操作可以调用各种未定义的行为(错误),因此应该始终避免。例如,1 << 31是32位系统上的严重错误,而1u << 31完全正常且安全。