2016-11-16 4 views
-6

を理解する上で私を助ける:C、このコードが印刷されます。このASCIIのPROB

S = 1、I = 65537、= 65537.000000、C = 1

fが、私はなぜ理解する上で助けを必要とそれはc = 1を印刷していますか?出力へ

#include <stdio.h> // Standard input-output library 
#include <stdlib.h> // Standard general utilities library 

int main(void) { 
    int i = 65537; 
    unsigned short s = (unsigned short)i; 
    float f = (float)i; 
    char c = (char)i; 
    printf("s = %u, i = %d, f = %f, c = %d\n", s,i,f,c); 
    system("PAUSE"); 
    return (0); 
} 
+0

を持つことになります。あなたは '%d'ではなく'%c'で 'char'sを表示します。 – StoryTeller

+2

@StoryTeller数値を見たい場合はありません。 – aschepler

+2

同じ理由でc = 1 s = 1 – Stefan

答えて

1

もしこの

#include <stdio.h> 

int main(void) 
{ 
    int i = 65537; 

    printf("%#0x\n", i); 

    return 0; 
} 

のような16進数表現で変数iその後、あなたはそれが常に

0x10001 

タイプcharのように見えることがわかります。

コード1バイトを占有する。したがって、この割り当てでi

0x10001 
    ^^ 

オブジェクトの

char c = (char)i; 

1バイト変数cに格納されています。あなたのプログラムには型指定%dを使用して出力され

printf("s = %u, i = %d, f = %f, c = %d\n", s,i,f,c); 
           ^^^^^^ 

printf声明で

。したがって、その内部値は、タイプintの整数として出力されます。

通常、タイプunsigned shortのオブジェクトは2バイトを占有します。したがって、この割り当て

unsigned short s = (unsigned short)i; 

にオブジェクトi

0x10001 
    ^^^^ 

の最初の2バイトの値が変数sに割り当てられます。あなたは間違った指定子を使用しているので

のでcs両者は値1

関連する問題