我有一些C++代码需要我在赋值语句中立即赋值。该代码使代码更难阅读,我希望有一种解决方法。必须赋值赋值
uint64_t shifted_val = (uint64_t)1 << 50;
如果我写这篇文章的代码,而中投,shifted_val
被设置为0,我想是因为它的治疗1
直接作为32位值。有什么我失踪,以便我可以写这个没有铸造?
我有一些C++代码需要我在赋值语句中立即赋值。该代码使代码更难阅读,我希望有一种解决方法。必须赋值赋值
uint64_t shifted_val = (uint64_t)1 << 50;
如果我写这篇文章的代码,而中投,shifted_val
被设置为0,我想是因为它的治疗1
直接作为32位值。有什么我失踪,以便我可以写这个没有铸造?
一种方式来做到这一点是通过执行的习惯接收变量本身内的计算
uint64_t shifted_val = 1;
shifted_val <<= 50;
这将自然解决问题,无需使您可以将其他类型引用硬编码到表达式中(如类型转换或类型特定的后缀)。
我认为这是最好的答案。 –
该常量需要被视为一个64位值,所以需要有某种方式来指定它。
你可以指定它为1ULL
,它告诉编译器常量是unsigned long long
,但是这可能不一定是64位,所以你最好使用演员来更便携。
'1ull' **至少** 64位宽,这就是所需要的。 –
你可以这样做:
uint64_t shifted_val = 1ull << 50;
如果你觉得语法还靠近,然后浇铸你可以这样做:
uint64_t a = 1;
uint64_t shifted_val = a << 50;
括号是无害但不必要的。 –
删除括号。 – PhotometricStereo
写入'(1ull << 50)' –
常量'1'的类型为'int'(不管它的位数是多少),所以'1 << 50'也是'int'类型。事实上'1 << 50'具有未定义的行为,除非'int'大于50位。 –