(Qt C ++)int不会添加数字?

时间:2013-07-12 18:46:24

标签: c++ qt int operators

:) 您好,

我长期以来一直在摸不着头脑。我只是想把4294967296添加到我的负int(-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为int,范围为0到4294967295.

1 个答案:

答案 0 :(得分:1)

您好像假设将-492添加4294967296会给您+431。

这不正确(我想知道你是如何做出这个假设的。)

4294967296是2 32 。将2 32 添加到32位int可能只是环绕并为您提供原始值。实际上有符号整数溢出具有未定义的行为,但是通用实现只忽略除了低位32位之外的所有 - 并且4294967296的所有低位32位都是0.它在十六进制中更清楚:4294967296是0x100000000,并且丢弃了第33位bit给你0x00000000。

如果你有-432并且想要+431,那么有多种方法可以做到;最简单的可能只是

temp_int = -temp_int - 1;

更简单的方法是:

temp_int = 431;

但这可能不是你想要的。

如果我们理解你要做的事情会有所帮助。

  

在这种情况下,SpawnX,Y,Z为int,范围为0到4294967295.

如果您需要该范围,则需要使用32位无符号类型。如果unsigned int是32位,则它可以表示0到4294967295之间的值。在这种情况下,添加4294967296 环绕并为您提供原始值;无符号溢出,与有符号溢出不同,定义良好。