Questions tagged «numeric-conversion»

6
为什么0 <-0x80000000?
我下面有一个简单的程序: #include &lt;stdio.h&gt; #define INT32_MIN (-0x80000000) int main(void) { long long bal = 0; if(bal &lt; INT32_MIN ) { printf("Failed!!!"); } else { printf("Success!!!"); } return 0; } 条件if(bal &lt; INT32_MIN )始终为真。这怎么可能? 如果我将宏更改为: #define INT32_MIN (-2147483648L) 谁能指出这个问题?

7
通过强制转换为uint而不是检查负值来执行范围检查是否更有效?
我在.NET的List源代码中偶然发现了这段代码: // Following trick can reduce the range check by one if ((uint) index &gt;= (uint)_size) { ThrowHelper.ThrowArgumentOutOfRangeException(); } 显然,这比(?)更有效 if (index &lt; 0 || index &gt;= _size) 我对这招背后的理由感到好奇。一条分支指令真的比两次转换贵uint吗?还是正在进行其他优化,以使此代码比其他数字比较快? 为了解决房间里的大象问题:是的,这是微优化,不,我不打算在代码中到处使用它–我只是很好奇;)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.