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了。

------解决方案--------------------
ii/mm过程中,ii先被提升为unsigned int,由于ii的值-6不在unsigned int的表示值范围内,对于这种情况,c/c++标准规定,ii在此表达式所代表的值(注意不是ii本身)应转换为-6+UINT_MAX+1,因此,因此所得结果就是2147483645了。
------解决方案--------------------
探讨
unsigned int 与 int 相除,int 转成了unsigned int, -6变成 unsigned int这后的值就是4294967290,除2之后当然是2147483645了!
如果想是-3可以这样int kk = ii/(int)mm;