我需要分配一个64位值的变量

时间:2010-12-10 10:05:40

标签: c++ c

如果我定义一个结构x1然后分配一个unsigned int xyz:64,它会创建一个64位整数吗?

现在,如果我想让所有人都在64位中,那么下面的工作将是:

x1.xyz = 1

这个值是否会填充64个变量?如果有任何其他方法来定义变量并为其赋值,请建议我。

请帮助

提前致谢。

7 个答案:

答案 0 :(得分:4)

这将填充位模式000...001。导致111...111位模式的值为-1

答案 1 :(得分:3)

使用NOT操作(〜)执行此操作可能是键入次数最少的操作:

unsigned int x = ~0 ;

但是我不能完全确定是否有办法确保在不进行某种类型转换的情况下填充64位,如下所示:

__int64 y = ~ (__int64)0 ;

答案 2 :(得分:2)

将1分配给x1.xyz将导致63位0和1位1,其中十六进制为0x0000000000000001,您应该做的是: x1.xyz = 0xFFFFFFFFFFFFFFFF

答案 3 :(得分:1)

尝试将-1分配给无符号整数将最多导致编译器警告。你必须将-1转换为你想要分配的类型。

另一种方法是将值明确指定为0xFFFFFFFFFFFFFFFFU。

答案 4 :(得分:1)

您应该将标准类型用于64位无符号整数,即uint64_t,即

#include <stdint.h>

struct MyStruct
{
    uint64_t xyz;
};

// in the code somewhere

struct MyStruct x1;
x1.xyz = ~0;
// or
x1.xyz = 0xFFFFFFFFFFFFFFFF;

答案 5 :(得分:0)

都能跟得上

这会将一个分配给变量,二进制文件为:

0000000000000000000000000000000000000000000000000000000000000001

分配所有必须使用无符号类型的最大值(在c ++中应该是unsigned __int64)

我认为最大值是

18,446,744,073,709,551,615

根据这个:http://msdn.microsoft.com/en-us/library/s3f49ktz(VS.80).aspx

答案 6 :(得分:0)

实现定义了int作为位域是否已签名。首先,您应该使用signedunsigned来指定此内容。

但是如果你总是只对64位感兴趣(编译器可能支持或不支持位域),你应该明确地使用“{1}}(或uint64_t)类型” stdint.h”。那么使用位域对我来说没什么意义。

如果您没有,请在您的平台上为apprioate 64位类型执行int64_t,以后可以轻松替换或放入typedef子句。