无符号int的按位OR,没有警告

时间:2014-02-24 09:43:58

标签: c bitwise-or

我正在尝试重写以下代码:

$ cat t.c 
int main()
{
  unsigned int i = 0;
  int v = 3;
  i |= v;
  return 0;
}

使用最近的gcc,您应该收到以下警告:

$ gcc -Wconversion t.c
t.c: In function ‘main’:
t.c:5:3: warning: conversion to ‘unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion]

如何在保持代码可读性的同时重写按位OR以避免此警告。 unsigned int i在库代码中非常深入,因此我无法将其更改为int。

1 个答案:

答案 0 :(得分:6)

您不应该从 unsigned更改,而更改。位运算总是最好在unsigned变量上执行。

制作v unsigned