use*_*439 -4 c bitwise-operators bitwise-or
#include<stdio.h>
int main()
{
int const SIZE=5;
int expr;
double value[SIZE]={2.0,4.0,6.0,8.0,10.0};
expr=1|2|3|4;
printf("%f",value[expr]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如何评估上述代码?特别声明:
expr=1|2|3|4;
Run Code Online (Sandbox Code Playgroud)
这是一个按位OR.
这一行:
expr=1|2|3|4;
Run Code Online (Sandbox Code Playgroud)
就好像:
expr = b0001 | b0010 | b0011 | b0100;
Run Code Online (Sandbox Code Playgroud)
所以:
0001
0010
0011
0100
----
0111
expr = b0111;
expr = 7;
Run Code Online (Sandbox Code Playgroud)
特别声明:expr = 1 | 2 | 3 | 4;
该|运营商计算按位或操作数的:
1 = 00000001b
2 = 00000010b
3 = 00000011b
4 = 00000100b
-------------
Result: 00000111b = 7
Run Code Online (Sandbox Code Playgroud)
因此,您将最终观察到未定义的行为,因为您正在访问不存在的数组元素:
expr=1|2|3|4; // evaluates to 7
printf("%f", value[expr]); // accesses array element at index 7 which is out of bounds
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |