Yua*_*Wen 4 c++ implicit-conversion
我刚写了这些代码:
int x = -1;//x must be negative
unsigned int y = 1;//y must be positive
bool b;
for(; ; x--, y++){
b = ((unsigned int)x) * y == ((unsigned int)(x * y));
}
Run Code Online (Sandbox Code Playgroud)
然后我发现这b总是如此.在我看来,((unsigned int)x)*y会溢出,但((unsigned int)(x*y))不会.我真的很难相信这是真的.这只是巧合还是这种现象背后有任何法律?
In x * y,x已经转换unsigned为通常的算术转换的结果.§5/ 10:
即你的第一个表达式,(unsigned)(x * y)相当于(unsigned)((unsigned)x * y)相当于(unsigned)x * y- 你的第二个表达式.
请注意,等级unsigned int等于(signed)的等级为int§4.13/ 1.4:
任何无符号整数类型的等级应等于相应的有符号整数类型的等级.