2

次のコードの場合:

void main()
{
   int i;
   float a=5.2;
   char *ptr;
   ptr=(char *)&a;
   for(i=0;i<=3;i++)
      printf("%d ",*ptr++);
}

o/p を 102 102 -90 64 として取得しています。なぜですか?文字ポインターは各バイトの MSB ビットをどのように扱うのですか?

4

4 に答える 4

2

char が符号付きか符号なしかは実装定義です。システムの char データ型が署名されていることは明らかです。したがって、MSB は符号ビットです。

于 2012-09-28T21:13:42.177 に答える
1

5.2浮動小数点値をバイナリ形式に変換すると、次のようになります。

5.2 = 01000000 (=64) 10100110 (=166) 01100110 (=102) 01100110 (= 102)

3 番目のバイト ( ) を( 内で) 値166に変換すると、 が得られます。signed char[-128, 127]-90

でプログラムをコンパイル-funsigned-charして、出力として取得102 102 166 64します。

于 2012-09-28T21:50:09.163 に答える
1

あなたの場合、明らかに最上位ビットを符号ビットとして扱います。つまり、実装charでは、2 の補数表現を持つ符号付き整数型です。

于 2012-09-28T21:13:34.340 に答える
0

あなたの場合、charは符号付きビット表現を使用しています。値に関する限り、作業中のシステムのエンディアンに依存します。

于 2012-09-29T09:38:43.267 に答える