1

我想将 a long long(一个 64 位值)拆分为两个ints (每个 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变量在使用,也不能修复警告。

4

0 回答 0