🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.c
Article #724

Re: printf()について

#724
From: A.Fujihara
Date: Sun, 15 Feb 1998 00:00
51 lines
2880 bytes
%dということは、int型の整数の表示になります。
C(C++)言語でint型は、その環境で最も自然に扱える
整数になります。
例えば、MS-DOS等の16ビットOS用のCコンパイラを
使用する場合、int型は16ビットに、WindowsNT等の
32ビットOS用のCコンパイラを使用する場合は、
32ビットになります。
ここまでくれば、察しがつくかと思いますが、
16ビットで表せる符号付き整数は、
  ゼロ:0x0000
  正数:0x0001~0x7fff (1~32767)
  負数:0x8000~0xffff (-32768~-1)
となります。
32ビットでは、
  ゼロ:0x00000000
  正数:0x00000001~0x7fffffff (1~ 2147483647)
  負数:0x80000000~0xffffffff (-2147483648~-1)
となります。

つまり、42340は0xa564ですので、16ビットでは負数の範囲になり、
その結果、printfで表示される値は-23196となります。
ですが、32ビットですと42340は0x0000a564ですので、
正数の範囲内となり、42340と表示されるわけです。

結論としては、「Cの本」の著者は16ビットOS用のCコンパイラを
用いているため、42340と表示するには、unsigned int型の表示を
指示する%uを使用しなければなりません。
VC++4.0は32ビットOS用のCコンパイラですので、0x0000a564は
int型としても、unsigned int型としても正数の範囲にありますので、
%dを使用しても%uを使用しても、42340と表示されるわけです。

以上、長く分かり難い説明ですが、参考になれば幸いです。

----------------------------------------
A.Fujihara
mailto:afujihar@fsinet.or.jp

matuo wrote in message <01bd3957$77d7a0c0$2a2e21ca@ma24659q>...
>初心者です。
>#include <stdio.h>
>main()
>{
>printf("%d", 42340);
>}
>というプログラムがあります。僕がつかっているCの本では、
>42340ではなく、-23196と表示される。正しく表示させるには、
>%uを使うと書いてあります。しかし、僕の環境(visuall C++ 4.0)では、
>42340と同じになっています。たぶん、開発環境の発達によって
>改善されたのだと思うのですが、どういう理屈かわからないので、
>わかる方は、どうぞよろしくお願いします。
Technical Details
Message-ID: <6c4nv9$qfe$1@horse.fsinet.or.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <01bd3957$77d7a0c0$2a2e21ca@ma24659q>

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 106434,bb414caaa6d5dd8f
X-Google-Attributes: gid106434,public
From: "A.Fujihara" <afujihar@fsinet.or.jp>
Subject: Re: printf()について
Date: 1998/02/15
Message-ID: <6c4nv9$qfe$1@horse.fsinet.or.jp>
X-Deja-AN: 325087594
Content-Transfer-Encoding: 7bit
References: <01bd3957$77d7a0c0$2a2e21ca@ma24659q>
Content-Type: text/plain; charset="iso-2022-jp"
X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4
Organization: The FSI Network
Mime-Version: 1.0
Newsgroups: fj.lang.c