int main()
{
int a = 2147483647;
int c = a + a + 2;
printf("2a + 2 = %d, !(2a + 2) = %d, !c = %d\n", (2 * a + 2), !(a + a + 2), !c);
}
我运行上面的代码时得到了这个
2a 2 = 0, !(2a 2) = 0, !c = 1
a是Tmax,它的二进制形式是0111…111,所以a 2被假定为0000…0000。我不明白为什么!当(2a2)实际上为0时,(2a 2)不等于1,但是!c是1!!!请帮帮我
假设int
为32位,您正在执行的操作会导致有符号整数溢出。这样做会触发未定义的行为。它不一定是环绕的。
事实上,在C标准第3.4.3p3节中,这个特定的案例被作为未定义行为的一个例子,其中定义了术语未定义行为:
未定义行为的一个例子是整数溢出行为
您已经遇到了一种未定义行为表现自身的奇怪方式,即看似相同的操作表现不同。未定义的行为意味着不能保证你的程序会做什么。
我正在创建一个程序,将确定和打印数字奇数,偶数和零在一个整数从键盘。我尝试了几种不同的方法,每种方法都得到了相同的结果。我无法让java将0识别为0,而只能识别为偶数。例1005将给出2赔率和2平。
亲爱的SO朋友们! 我有一个奇怪的问题与MariaDB 5.5.60运行在linux上。 出于某种原因,我正在对差异列进行简单的操作,正如您所看到的,它是一个双倍的。 问题是: -917.3700000000001 当系统开始加减值时会发生这种情况。由于这些数字代表金钱,我们不能容忍任何随意的差别。 可能导致此问题的查询之一如下: 如您所见,该值正在更新为减去$xfer- 这甚至有点难以复制,因为
问题内容: 我在ColdFusion代码中碰巧遇到了这些值,但Google计算器似乎有相同的“错误”,但差不为零。 416582.2850-411476.8100-5105.475 = -2.36468622461E-011 http://www.google.com/search?hl=zh_CN&rlz=1C1GGLS_enUS340US340&q=416582.2850+-+411476.8
问题内容: 我了解由于数值误差(例如,以不同顺序对浮点求和),在数学上等效的算术运算如何导致不同的结果。 但是,令我惊讶的是,将零加到可以更改结果。我认为无论哪种情况,这对于浮动广告始终有效。 这是一个例子。我希望所有行都完全为零。有人可以解释为什么会这样吗? 和的较小值似乎不会发生Z。 我也确定。 这是另一个示例,它还演示了python的内置行为符合预期: 我正在使用numpy V1.9.2。
问题内容: 我有一些带有一些整数的PHP代码,并且一切正常,除非我拥有或作为整数。当我引用它们时,一切都很好。 示例编号: 谁能告诉我背后的原因? 问题答案: 如果您只写08和09(不带引号)或任何其他带有前导0的数字,则PHP认为您正在写一个八进制值,而08和09是无效的八进制数。 http://www.php.net/manual/zh/language.types.integer.php 句
问题内容: 我该如何忽略和制造? 问题答案: 分母之前检查分母是否为零。这样可以避免捕获异常的开销,如果您希望将其除以零,则可能会更有效率。