必须在作业

时间:2016-07-07 23:26:40

标签: c++ c casting

我有一些c ++代码要求我立即在转让声明中投出。该演员使代码更难以阅读,我希望有一种解决方法。

uint64_t shifted_val = (uint64_t)1 << 50;

如果我在没有强制转换的情况下编写此代码,shifted_val设置为0,我会假设它因为它将1立即数视为32位值。是否有一些我不知道的东西,以便我可以不用铸造来写这个?

3 个答案:

答案 0 :(得分:6)

你可以这样做:

uint64_t shifted_val = 1ull << 50;

如果您认为语法也接近于强制转换,那么您可以执行以下操作:

uint64_t a = 1;
uint64_t shifted_val = a << 50;

答案 1 :(得分:5)

一种方法是采用在收件人变量本身内执行计算的习惯

uint64_t shifted_val = 1;
shifted_val <<= 50;

这将自然地解决问题,而不要求您将其他类型引用硬编码到表达式中(如类型转换或类型特定的后缀)。

答案 2 :(得分:2)

常量需要被视为64位值,因此需要某种方式来指定它。

您可以将其指定为1ULL,它告诉编译器常量是unsigned long long,但是这可能不一定是64位,所以你最好使用强制转换为更便携