c++ - 将 '65280' 从 'int' 缩小到 { } 内的 'short int'

标签 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, 0xFF06, 0xFF07, 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F, 0xFFFF, 0xFFFF};

当我编译时,我收到以下消息:

[Warning] narrowing conversion of '65280' from 'int' to 'short int' inside { } [-Wnarrowing]

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

此外,我总是遇到访问冲突。 为什么?我该如何解决?

最佳答案

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

如评论中所述,最好的解决方案可能是将类型更改为 unsigned short,其范围为 [0, 65535]

关于c++ - 将 '65280' 从 'int' 缩小到 { } 内的 'short int',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28389750/

相关文章:

c++ - 可以将 C++ 复制构造函数用于其他目的吗?

c++ - 当 RCPP 程序无法正常工作时,有没有办法阻止 RGui 崩溃?

c++ - 赋值运算符重载 : Error Handling scenario

itoa() 的 C++ 标准替代方法,用于将 int 转换为 base 10 char*

swift - 将十六进制转换为 Swift 格式的字符串以保持相同的位数

java从文件中读取int,原始方法不起作用寻找新的东西

c++ - 使用 Clang 从 C 源代码生成 AST

android - 将短数组从音频记录转换为字节数组,而不降低音频质量?

java - Android 和 Java 短裤

c 内联汇编字符数组转短