对不起这个简单的问题,但我无法解决它......
有一个例子:
int a[10] = {6, 7.8, 8.0, -6, -5.7, 5, 5.7};
std::cout << a[6 % 8 / 4 + 21 % 9];
作为回应,我得到-5,但我不明白为什么。
对不起这个简单的问题,但我无法解决它......
有一个例子:
int a[10] = {6, 7.8, 8.0, -6, -5.7, 5, 5.7};
std::cout << a[6 % 8 / 4 + 21 % 9];
作为回应,我得到-5,但我不明白为什么。
因为你的数组是一个整数数组。
你应该首先使用
float a[10]
http://en.cppreference.com/w/cpp/language/operator_precedence 运算符有其优先级,因此在这种情况下:6 % 8 / 4 + 21 % 9 = (((6%8)/4)+(21% 9))=(6/4)+(3)=4
a[0]=6,
a[1]=(int)7.8 = 7, (correct me if i'm wrong)
a[2] = (int)8.0 = 8,
a[3] = -6,
a[4] = (int)-5.7 = -5,
a[5] = 5,
a[6] = (int)5.7 = 5
所以索引为 4 的元素将 -5.7 转换为整数给出 -5 (其余的只是被切断)
6 % 8 / 4 => (6%8) / 4 => 6 / 4 => (int)1.5 => 1
(6/4 是 int -- num 和 denom 是 int)
21 % 9 => 3
1 + 3 == 4
a[4] == (int)(-5.7) == 5
a
是一个int
数组,所以那里的数字是整数而不是浮点数。
选择索引 4 是因为C++ 运算符优先级