gpt4 book ai didi

C++:大型无符号整数的编译器警告

转载 作者:IT老高 更新时间:2023-10-28 21:56:18 26 4
gpt4 key购买 nike

我有以下数组,我需要在位图上手动操作。

const unsigned int BITS[32] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 
2048, 4096, 8192, 16384, 32768, 65536, 131072,
262144, 524288, 1048576, 2097152, 4194304,
8388608, 16777216, 33554432, 67108864, 134217728,
268435456, 536870912, 1073741824, 2147483648};

不幸的是,编译时我得到了

warning: this decimal constant is unsigned only in ISO C90

我怎样才能删除它?

最佳答案

默认情况下,C 中的整数文字属于“signed int”类型(编辑:但请参阅注释以了解警告)。最后一个数字太大而无法表示为带符号的 32 位整数,因此您需要通过在其后缀“U”来告诉编译器它是无符号整数,如下:

2147483648U

请注意,您还可以添加“L”后缀以使其成为“长”,但在许多系统上仍然是 32 位,因此无关紧要。

此外,还有一种更不容易出错(且更易于阅读)的方式来编写此代码,使用移位运算符:

const unsigned int BITS[32] = {1U, 1U<<1, 1U<<2, 1U<<3, 1U<<4,
/* and so on */
1U<<31};

或者,如果您出于某种原因不喜欢位移,则以十六进制编写:

const unsigned int BITS[32] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20,
/* and so on */
0x80000000U};

关于C++:大型无符号整数的编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com