【问题标题】:Narrowing conversion of '65280' from 'int' to 'short int' inside { }在 { } 内将“65280”从“int”缩小到“short int”
【发布时间】:2015-02-08 01:59:51
【问题描述】:

我有两个数组:

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

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

【问题讨论】:

  • 看起来你想要unsigned short
  • 您的 sn-p 代码没有帮助。您的代码中的 int 和 short int 之间没有进行转换。当我运行它时,这段代码的 sn-p 也没有给我任何错误
  • @IrrationalPerson:实际上,0x7FFF 上面的每个文字都有一个。
  • 这是因为(有符号的)short 范围仅在 [-32,768, 32,767] 之间。转换高于该值的任何值都将是缩小转换。
  • @MatteoItalia: 所有整数字面量的类型为int,它们都被隐式转换为short

标签: c++ int short narrowing


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-10-21
    • 1970-01-01
    • 2013-01-19
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    相关资源
    最近更新 更多