【问题标题】:Bitwise OR on unsigned int without warning无符号整数上的按位或,没有警告
【发布时间】:2014-02-24 09:43:57
【问题描述】:

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

$ 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。

【问题讨论】:

  • 我认为如果在库中所有代码都使用int,你也应该使用int i而不是uint i,并且代码的用户需要检查这是否是一个问题
  • 你能改一下int v吗?

标签: c bitwise-or


【解决方案1】:

您不应该将 unsigned 更改为 它。按位运算总是最好在unsigned 变量上执行。

制作vunsigned

【讨论】:

  • 确实很简单,出于某种原因,我认为默认情况下对(有符号)整数进行按位运算。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 2011-04-09
  • 2019-10-10
  • 1970-01-01
  • 2011-05-28
  • 2011-01-22
相关资源
最近更新 更多