在C中声明64位变量

David 天宇 Wong

我有个问题。

uint64_t var = 1; // this is 000000...00001 right?

在我的代码中,这可行:

var ^ (1 << 43)

但是如何知道1应该是64位呢?我不应该写这个吗?

var ^ ( (uint64_t) 1 << 43 )
Matteo意大利

如您所料,1是一个普通符号int(在您的平台上,2的补码算术可能是32位宽),而43也是如此,因此,任何机会都可能1<<43导致溢出:实际上,如果两个参数都属于int运算符规则类型决定结果int也是。

不过,在C中,有符号整数溢出是未定义的行为,因此原则上任何事情都可能发生。在您的情况下,编译器可能发出了在64位寄存器中执行该移位的代码,因此幸运的是,它似乎可以工作。要获得保证正确的结果,您应该使用编写的第二种形式,或者使用后缀(保证至少为64位)指定1unsigned long long文字ullunsigned long long

var ^ ( 1ULL << 43 )

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章