:)
你好,

我已经为此努力了很长时间。我只是想将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/

10-11 10:55