:)
你好,
我已经为此努力了很长时间。我只是想将4294967296添加到我的负整数(-432至+431)中,我有这个
int temp_int;
temp_int = ui->SpawnX->value(); //From spinbox
if(temp_int < 0)
{
temp_int = temp_int + 4294967296;
qDebug() << temp_int;
}
但是无论我尝试什么,temp_int都保持不变,我使用qDebug仔细检查。我究竟做错了什么!!!?
在我的程序的前面:
//Get spawn point and fix negative numbers
temp_hex = level.mid(18+level.indexOf("030006537061776e58"), 8);
HexToInt(temp_hex, SpawnX);
temp_hex = level.mid(18+level.indexOf("030006537061776e59"), 8);
HexToInt(temp_hex, SpawnY);
temp_hex = level.mid(18+level.indexOf("030006537061776e5a"), 8);
HexToInt(temp_hex, SpawnZ);
if(SpawnX > 432)
SpawnX = SpawnX-4294967296;
if(SpawnY > 432)
SpawnY = SpawnY-4294967296;
if(SpawnZ > 432)
SpawnZ = SpawnZ-4294967296;
在这种情况下,SpawnX,Y,Z是整数,范围可以从0到4294967295。
最佳答案
您似乎假设将4294967296添加到-432将给您+431。
这是不正确的(我想知道您是如何做出这个假设的)。
4294967296是232。将232添加到32位int
可能会回绕并为您提供原始值。实际带符号的整数溢出具有未定义的行为,但是常见的实现方式只是忽略了除低阶32位之外的所有位,并且4294967296的所有低阶32位均为0。十六进制形式更清楚:4294967296为0x100000000,并删除了第33位位会给您0x00000000。
如果您有-432并且想要+431,则有多种方法可以实现;最直接的可能只是
temp_int = -temp_int - 1;
一个更简单的方法是:
temp_int = 431;
但这可能不是您想要的。
如果我们了解您要执行的操作,这将有所帮助。
在这种情况下,SpawnX,Y,Z是整数,范围可以从0到4294967295。
如果需要该范围,则需要使用32位无符号类型。如果
unsigned int
是32位,则它可以表示0到4294967295之间的值。在这种情况下,加4294967296将环绕并给出原始值;否则,它等于0。与有符号溢出不同,无符号溢出定义明确。关于c++ - (Qt C++)int是否会添加数字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17621959/