int溢出的工作原理。我的意思是问如果发生溢出,整数值的最终结果是什么?我需要在纸上理解它。就像我给出了一个多项选择题:
11 ^ 5产生:
一个。 12个
湾14
C。 15
d。 17.
我知道答案是(b)14
,但想知道原因吗?
答案 0 :(得分:5)
<bpel:variable name="counter" type="ns1:int">
<bpel:from>1</bpel:from>
</variable>
<bpel:while name="While">
<bpel:condition expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
<![CDATA[]]>
</bpel:condition>
<bpel:assign validate="no" name="Assign2">
</bpel:assign>
</bpel:while>
fyi,这与int溢出没有任何关系。
答案 1 :(得分:1)
因为你问的是环绕式,我正在回答下面的问题。但是从评论中可以清楚地看到,你真的尝试了C ++表达式11^5
,这是一个等级XOR,并得到了答案14,这与环绕无关。如果它们是相同的值,则每对位的XOR结果为0,如果它们不同则为1。
现在,在下面的^表示取幂;这是一个常见的符号。
11 ^ 5 = 161051。
现在考虑使用16位来表示整数的情况,并且只有幅度,没有符号。即一个16位无符号C ++整数类型。然后有2 ^ 16个可能的位模式,它们编号为0到2 ^ 16 - 1,并代表这些数字。
161051大于该16位类型的最大可能值。如果它恰好是2 ^ 16,则它将对应于0(称为环绕),如果它是2 ^ 16 + 1,则它将对应于1,依此类推。所以它对应于161051 - 2 ^ 16。
现在如果反过来也大于2 ^ 16 - 1,你会重复这个过程。
这会产生整数除法的余数2 ^ 16。
基本上它只对应于删除除了16个最不重要的位之外的所有位。
顺便说一下,这个例子的结果不是你的任何选择(a),(b),(c)或(d)。