如何重写此测试以使测试本身不会溢出?我可以使用(size_t) -1
奇数(2 减去 1 的幂)这个事实吗?
size_t size;
...
if ((size * 3U + 1U) / 2U > (size_t) -1) {
/* out of address space */
}
编辑:对不起,我的问题标题是错误的。我不想检查是否(n * 3 + 1) / 2
会溢出,但如果n / 2 * 3 + n % 2 * 2
会。我改了标题。感谢您对一个不好的问题的正确答复。