我有一些c ++代码要求我立即在转让声明中投出。该演员使代码更难以阅读,我希望有一种解决方法。
uint64_t shifted_val = (uint64_t)1 << 50;
如果我在没有强制转换的情况下编写此代码,shifted_val
设置为0,我会假设它因为它将1
立即数视为32位值。是否有一些我不知道的东西,以便我可以不用铸造来写这个?
答案 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位,所以你最好使用强制转换为更便携