相关疑难解决方法(0)

在C中签名vs unsigned int

我是C初学者,需要快速澄清有关整数.

当你将某个东西作为一个32位的int转换时,一半的位被分配给负整数.因此,如果您知道您将始终具有正整数,则将某些内容作为无符号整数推送应该最大化您的正位,因此当您知道输出将始终为正时更有意义.这是真的?

谢谢!

c int

4
推荐指数
2
解决办法
5505
查看次数

在C中减去无符号整数并获取-Wconversion警告

考虑:

uint16_t x;
uint16_t y;

y = 0;
x = y - 1;
Run Code Online (Sandbox Code Playgroud)

X将是一些疯狂的数字. 请参阅其他SO文章的"为什么",并了解2的赞美.

(我不是在问为什么会这样.我知道为什么.我在问别的.请继续阅读.)

如果你打开gcc标志-Wconversion,这个完全有效的C代码将抛出conversion to ‘uint16_t {aka short unsigned int}’ from ‘int’ may alter its value那就是编译器试图帮助我们不要搞砸了.而且我倾向于打开这样的警告,因为它们可以帮助我避免搞砸.

但是,有一些现实情况,我们可能会使用unsigned int作为计数器,并希望减去1并且不会得到此警告.此外,我们希望将其用作计数器,将其降至零,然后停止.要在C中执行此操作,我们必须进行某种检查.但是,这种检查代码会违反gcc警告.

像上面的代码一样.

我想要我的蛋糕,我也想吃它.

这个优雅的解决方案是什么?

c gcc

4
推荐指数
2
解决办法
507
查看次数

标签 统计

c ×2

gcc ×1

int ×1