我有C代码,我在其中执行以下操作.
int nPosVal = +0xFFFF; // + Added for ease of understanding
int nNegVal = -0xFFFF; // - Added for valid reason
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试
printf ("%d %d", nPosVal >> 1, nNegVal >> 1);
Run Code Online (Sandbox Code Playgroud)
我明白了
32767 -32768
Run Code Online (Sandbox Code Playgroud)
这是预期的吗?
我能够想到类似的东西
65535 >> 1 = (int) 32767.5 = 32767
-65535 >> 1 = (int) -32767.5 = -32768
Run Code Online (Sandbox Code Playgroud)
也就是说,-32767.5四舍五入为-32768.
这种理解是否正确?
我正在使用长int数据,我试图确定数组中的最小元素.我知道循环遍历数组的传统方法来找到最小值.这个问题是检查是否有其他方法可以加快速度.
这个数组的某些属性可能可以帮助我们加快速度,但我不确定如何.
该数组恰好有8个长整数.每当我们调用该函数时,我们从数组中找到一个min,并且数字被另一个数字替换,我们重复这一步.(至少80亿次)
我想要记住下一次迭代的第二大数字(因为我们将在当前迭代中对它们进行比较).与通过数组的线性实现相比,这是否有用?
也允许排序,但我们必须以某种方式记住使用临时数组的原始位置.这会更有效吗?
还能以某种方式使用SIMD来确定长期最小值吗?即使是毫秒级的加速也很有用,因为我正在进行数十亿次此操作.