0

私はCの基本的な概念でいくつかの課題を抱えています。助けは大いに義務付けられるでしょう。私は先に進み、コードの説明と、そこで尋ねようとしている質問でコードに注釈を付けました。

void main (void)
{
  printf("%x", (unsigned)((char) (0x0FF))); //I want to store just 0xFF;
  /* Purpose of the next if-statement is to check if the unsigned char which is 255
   * be the same as the unsigned int which is also 255. How come the console doesn't print
   * out "sup"? Ideally it is supposed to print "sup" since 0xFF==0x000000FF.
   */
  if(((unsigned)(char) (0x0FF))==((int)(0x000000FF))) 
     printf("%s","sup");
}

ご協力ありがとうございました。

4

1 に答える 1

8

かっこを間違えました、

if(((unsigned)(char) (0x0FF))==((int)(0x000000FF))) 

左側のオペランドで2つのキャストを実行します。最初はchar、通常(1)で-1になり、次にその値はunsigned int、通常(2)で2 ^ 32-1=4294967295になります。

(1)符号付きの場合char、8ビット幅、2の補数が使用され、ホストされている実装の大部分の場合と同様に、最下位バイトを取得するだけで変換が行われます。が符号なしの場合char、または8ビットより広い場合、結果は255になります。

(2)キャストのchar結果が-1で、unsigned int32ビット幅の場合。

于 2012-09-23T18:40:13.793 に答える