C++ 缩小'的转换范围;65280';从';int';至';短整数';内{}

C++ 缩小'的转换范围;65280';从';int';至';短整数';内{},c++,int,short,narrowing,C++,Int,Short,Narrowing,我有两个阵列: short GMobiles[18] = {0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x00FF, 0xFFFF}; short GMobiles2[18] = {0xFF00, 0xFF01, 0xFF02, 0xFF03, 0xFF04, 0xFF05, 0xFF

我有两个阵列:

short GMobiles[18] = {0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x00FF, 0xFFFF};
short GMobiles2[18] = {0xFF00, 0xFF01, 0xFF02, 0xFF03, 0xFF04, 0xFF05, 0xFF06, 0xFF07, 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F, 0xFFFF, 0xFFFF};
编译时,我得到以下消息:

[警告]缩小“65280”从“int”到“short int”的转换范围 内部{}[-Wnarrowing]

对于包含FF的每个元素,如0xFF0D或0xFFFF

而且,我总是会遇到访问冲突。
为什么?我如何解决这个问题呢?

在您的系统上,
短整数的范围可能是
[-32768,+32767]
int
65280
超出范围,因此存储在数组中的值是实现定义的


如评论中所述,最好的解决方案可能是将类型更改为
unsigned short
,其范围为
[0,65535]
在您的系统上
short int int
的范围可能是
[-32768,+32767]
int
65280
超出范围,因此存储在数组中的值是实现定义的


如注释中所述,最好的解决方案可能是将类型更改为
无符号短
,其范围为
[065535]

看起来像您想要的
无符号短
。您的代码片段没有帮助。代码中int和short int之间没有转换。这段代码在我运行时也不会给我任何错误it@IrrationalPerson:实际上,上面的
0x7FFF
每个字面值都有一个。这是因为(有符号)仅在[-32768,32767]之间的短范围内。转换上面的任何值都将是一个缩小转换。@MatteoItalia:所有整数文本的类型都是
int
,它们都隐式转换为
short
。看起来您需要
无符号short
。您的代码片段没有帮助。代码中int和short int之间没有转换。这段代码在我运行时也不会给我任何错误it@IrrationalPerson:实际上,上面的
0x7FFF
每个字面值都有一个。这是因为(有符号)仅在[-32768,32767]之间的短范围内。转换上面的任何值都将是缩小转换。@MatteoItalia:所有整数文本的类型都是
int
,它们都隐式转换为
short