1

私は2つの配列を持っています:

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]

0xFF0D や 0xFFFF など、FF を含む各要素に対して

また、いつもアクセス違反になります。なんで?どうすれば修正できますか?

4

1 に答える 1

4

お使いのシステムでは、 の範囲short intはおそらく[-32768, +32767]. int値が範囲外になり、その65280結果、配列に格納される値は実装定義になります。

コメントで述べたように、おそらく最善の解決策はunsigned short、範囲を持つ型を変更することです[0, 65535]

于 2015-02-08T02:17:03.407 に答える