c语言中的除法,该如何解决
c语言中的除法
请问:
int ii=-6;
unsigned int mm=2;
int kk = ii/mm;
这里的kk=2147483645;
请详细说一下原因。谢谢。。
------解决方案--------------------
把-6的补码形式为 11111111 11111111 11111111 11111010(4294967290)
做除法的时候把-6看成是无符号数了,除以2,正好是2147483645
------解决方案--------------------
ii/mm过程中,ii先被提升为unsigned int,由于ii的值-6不在unsigned int的表示值范围内,对于这种情况,c/c++标准规定,ii在此表达式所代表的值(注意不是ii本身)应转换为-6+UINT_MAX+1,因此,因此所得结果就是2147483645了。
------解决方案--------------------
------解决方案--------------------
ii/mm过程中,ii先被提升为unsigned int,由于ii的值-6不在unsigned int的表示值范围内,对于这种情况,c/c++标准规定,ii在此表达式所代表的值(注意不是ii本身)应转换为-6+UINT_MAX+1,因此,因此所得结果就是2147483645了。
------解决方案--------------------
请问:
int ii=-6;
unsigned int mm=2;
int kk = ii/mm;
这里的kk=2147483645;
请详细说一下原因。谢谢。。
------解决方案--------------------
把-6的补码形式为 11111111 11111111 11111111 11111010(4294967290)
做除法的时候把-6看成是无符号数了,除以2,正好是2147483645
------解决方案--------------------
ii/mm过程中,ii先被提升为unsigned int,由于ii的值-6不在unsigned int的表示值范围内,对于这种情况,c/c++标准规定,ii在此表达式所代表的值(注意不是ii本身)应转换为-6+UINT_MAX+1,因此,因此所得结果就是2147483645了。
------解决方案--------------------
------解决方案--------------------
ii/mm过程中,ii先被提升为unsigned int,由于ii的值-6不在unsigned int的表示值范围内,对于这种情况,c/c++标准规定,ii在此表达式所代表的值(注意不是ii本身)应转换为-6+UINT_MAX+1,因此,因此所得结果就是2147483645了。
------解决方案--------------------