【发布时间】:2011-04-21 17:06:20
【问题描述】:
我知道我可以通过以下方式获得更高的 int 64 值:
int32 higher = (int32)(iGUID >> 32);
但是我该如何设置呢?
我用这个试过了,但它说“表达式必须是可修改的值”:
iGUID << 32 = inewlGUID;
我需要保留另一个值,(如果我设置了较高的值,则应该保留较低的值)。
【问题讨论】:
我知道我可以通过以下方式获得更高的 int 64 值:
int32 higher = (int32)(iGUID >> 32);
但是我该如何设置呢?
我用这个试过了,但它说“表达式必须是可修改的值”:
iGUID << 32 = inewlGUID;
我需要保留另一个值,(如果我设置了较高的值,则应该保留较低的值)。
【问题讨论】:
更改高 32 位,同时保持低位不变:
iGUID = (iGUID & 0xFFFFFFFF) | (inewlGUID << 32);
【讨论】:
iGUID = (static_cast<int64>(inewlGUID) << 32) | (iGUID & 0xffffffff);
这将保留所有现有内容。
您还可以获取 64 位值的地址并将其转换为指向 int32 的指针,然后可以对其进行下标和分配。然而,这通常不推荐,因为它会使你的代码依赖于平台的字节顺序。
【讨论】: