我想将long long
(一个64位值)分成两个int
(每个32位)。为此,我使用“标准方式”将long long
右移32位以获取高32位,并将long long
强制转换为int以获取低32位。但是,clang-tidy
将该移动报告为警告:
将带符号整数操作数与二进制按位运算符一起使用
我的代码如下:
void split_long_long(long long value, int &upper, int &lower) {
upper = (int) (value >> 32); // <- Warning here at "value"
lower = (int) value;
}
您将如何重写此代码以避免出现警告?
注意写作
void split_long_long(unsigned long long int value, unsigned int &upper, unsigned int &lower) {
upper = (unsigned int) (value >> 32);
lower = (unsigned int) value;
}
即使仅使用unsigned
个变量,也无法解决该警告。