输入为正时,代码的输出是否为负?
a = {"a": 1, "c": 1}
b= {"b": 1, "c":2}
print(a.items()^ b.items())
> {('c', 1), ('c', 2), ('a', 1), ('b', 1)}
无论何时执行以上代码,为什么我会得到负值? int范围交叉后,它应该给出一个垃圾值,垃圾值可以是任何值。不必一定是负面的。
答案 0 :(得分:1)
当n小于或等于2时,返回值0。 (负数不进入循环,1和2导致i
= 0)大于2时,由于行i = i*(i-1)
,i的值快速增长,直到溢出为止。如果溢出结果-1(由于i--)为正,则循环以新的i
继续。由于测试条件是有效的,因此快速增长不可避免地继续进行,并导致越来越多的溢出,最终将导致数量减少,当减小的1值(i--)为零或负值时,则无法通过测试条件, for循环结束并返回i
。
因此不能返回正值 ,但是i
可能是正溢出结果的结果(当溢出结果为1并被i--减少为0时)
遵守aa(8)的特殊情况
首先调用aa(8)。
创建int i并将其分配为0。
for循环开始。
我八岁了
8> 0,所以我们在体内执行命令并将i设置为8 * 7 = 56
我们到达的结尾,所以我们执行i--,我变成55,
同样,我们检查测试条件,并检查55> 0,以便再次执行命令i = 55 * 54,for块结束,然后执行i-因此,i = 2969,
我们检查测试条件,并且2969> 0,所以我们执行命令i = 2969 * 2968,我们执行i-所以i = 8881991。
8881991> 0,所以我们执行主体i = 8881991 * 8881990,现在有一个溢出并且i变为负数,然后该数字减i--
但是现在测试条件i> 0为假,循环结束。
我回来了。
溢出结果 整数溢出的结果可以是其范围内的任何数字。
假设我们从零开始计数以表示该数字。
溢位产生的第一个数字是:
cout << INT_MAX+1;
输出:-2147483648(INT_MIN)
我们可以从这里进一步计数,因此结果可以是INT_MIN和INT_MAX之间的任意数字,请进行测试:
cout << INT_MAX+n
当n处于[1(INT_MIN)范围内时,1 + INT_MAX + 1(直到此处为0)+ INT_MAX(最大)]
再次达到INT_MAX,我们可以像以前一样继续计数...