int除以unsigned int导致翻转

shu*_*shu 5 c arithmetic-expressions

我尝试用unsigned int划分int,我得到意想不到的结果:

int b;
unsigned int c;
int res;
float res_f;

b = -25;
c = 5;

res = b / c;   // res = 858993454
res_f = b / c; // res_f = -5.000000
Run Code Online (Sandbox Code Playgroud)

同样适用于'+',' - '和'*',但是'/'失败.我想念的是什么?

PS

它在不同的编译器上进行了测试,结果是一样的.

Pau*_*l R 11

假设这是C或类似(例如目标C),改变:

res = b / c;
Run Code Online (Sandbox Code Playgroud)

至:

res = b / (int)c;
Run Code Online (Sandbox Code Playgroud)

说明:B被从转换intunsigned int,根据用于混合表达式C'S类型转换规则.在这个过程中它溢出-250xFFFFFFE7 == 4294967271.然后得到一个unsigned int结果4294967271 / 5U = 858993454U,然后将其隐式转换回int(在此步骤中没有溢出,因为结果在有符号和无符号32位整数的范围内).

顺便说一句,float结果应该是相同的,在a float(我得到858993472.0)的精度限制内.我很惊讶你在这种情况下得到-5.0.