#pragma twice

KAB-studio > プログラミング > #pragma twice > 058 Version 4.08 色々な型

#pragma twice 058 Version 4.08 色々な型

前のページへ 表紙・目次へ 次のページへ

 Version 4.08
色々な型

前回は short とバイトオーダーについて見てみました
リトルエンディアンなんて大っ嫌い!
まだ言ってるし……。さて、今回は他のいろんな型をばばっと見ていくこ
とにしましょう
ってことは、結構いろんな型があるの?
うん、結構あるね。 MSDN で【キーワード】に short って入れてみて
ほいっと。あ、結構出てきたね
下の中から【 short 型】をダブルクリックして、【該当するトピック】
の中から【基本型】を選んで
基本型ってページが出たよ。 char short int _intn long float double
long double ……いっぱいあるね
これが C++ 言語が最初から用意してくれている型。最初5つが整数を入
れるので、あとの3つが実数を入れるの
じっすー?
小数点付きの数字のこと
……ってことは整数って小数点付いてないののこと?
そうだよ。って知らなかったのか……
教わったよーな気もするけど。 char の部分に、この前言ってたようなこ
と書いてあるね
 char 、signed char 、 unsigned char のことだね。何も付いてない char
が signed か unsigned かっていうのは実は固定されてないんだよね
コンパイルオプションってので変えられるんだ。でもなにそのコンパイル
オプションって
ビルドするときの設定のこと。これはちょっと難しいから今度ね
ぶー
ま、デフォルトは signed だから
他の型も省略すると signed になるんだね。あれ、実数のにはそーゆーこ
と書いてないね
実数は整数と中身が違うからね
中身って?
整数の時はメモリの中は 0x01 が 1 だとか 0xFF が -1 とかだったけど、
実数はこれとは違う方法でメモリの中に置いてあるから
そーゆー中身ね
だから符号なしってのはないんだよね。全部符号あり
ほー
実数については、中身に沿った処理とかすることは少ないから、あんまり
気にしなくていいよ
それってたとえばビットフラグに使わないとか?
そういうことだね。じゃ次に、 MSDN の左下の一覧に short ってあるで
しょ
キーワードに short って入れて最初に出てきたのだよね。ダブルクリッ
ク! トピック4つ出てきたけど
【データ型の範囲】を選んで
ほいっと。さっきみたいな表が出たよ
 char があるでしょ、探してみて
うん、真ん中へんにあった。ええっと、 char 、バイト数 1 、その他の
名前 signed char 、範囲 -128 から 127 。なんだ、こーゆーのってちゃん
と書いてあるんだね
もちろん、資料としてね。僕としては、ただ読むよりプログラムで試した
方が分かりやすいと思ったから、このページを後回しにしたけど
まーね、あたしだってこのページ見せられて〈こうなんだよ〉とか言われ
ても納得できないもん
だよね。その下には
 unsigned char 、んで short に unsigned short っと、この辺もこの前
と同じね
その下のは初見でしょ。 long と unsigned long 
4バイトって書いてあるから、フツーに、 char が1バイト、 short が
2バイト、 long が4バイト、って考えちゃっていいの?
いいよ。基本的にサイズが違うだけ。操作法とか、中身とかは同じ
中身! ってことは…… 1 が……4バイトだから4マスで 01 00 00 00 
って並び順なの!?
そ、リトルエンディアンね
う”〜
値の範囲は?
あ、えーっと、うわなんかすごい数書いてあるね
符号ありはマイナス20億から20億まで、符号なしは40億までね
40億! すごー
すごいんだけど、 short が小さすぎるからこっちを使うのが多いかな
 short は6万、お給料入んないね
 enum はとばして、そのあとの float double そして long double は
実数のね
ねー、ここに書いてある 3.4E +/- 38 ってどーゆー意味?
 E っていうのは〈10の何乗か〉ってこと。 E 38 なら 10 の 38 乗、
ってことは0が38個並ぶってこと
……って、すごい数じゃん!
E -38 なら 10 のマイナス 38 乗、ってことは小数点以下0が37個並ぶ
ってことだね
はー、整数とは違うんだね……って、 float っての、たった4バイトに
そんな入るもんなの?
入んないよ。 float や double は〈浮動小数点〉っていって、ゼロの位
置が変わるからこんだけ表せるってだけ

数字の部分とゼロの位置を別々に取っておくってこと。数字が 1234 みた
いに入っているときに、ゼロの位置を移動できれば 0.0001234 や 12340000
とかすることができるから
はー、つまり〈値〉と〈基準〉が入ってるんだ
こういうふうにゼロ、つまり小数点の位置を変える方法を〈浮動小数点〉
っていいます
ふーん
ま、実数は当分使わないと思うから今回はこんなところで。結構複雑だか
ら一筋縄でいかないとこもあるからね
整数だけでもかなり複雑だもんねー
さて、型の最後は int について
そういえば、 int って最初の頃よく使ったよね
 int は表の一番最初に書いてあるから読んでみて
はーい。えっと、 int 、バイト数……? * ってなに? その他の名前は
signed と signed int 、まー char とかと同じ感じね。で、値の範囲……
システム依存?
そう、実は int は、サイズが開発環境とかOSとかによって変わってく
るんです
えっ、なんかそれ不安!
っていってもウィンドウズなら4バイト、つまり long と同じだけどね
あ、そうなんだ
コンピューターとかOSとかってよく16ビットとか32ビットとか64
ビットとかって書いてあるでしょ
うん、プレステ2が128ビットとか
昔は16ビットがあったけど、ウィンドウズ98とかを含めて、最近のパ
ソコンは32ビットがほとんど。64ビットとかはまだ先っぽいね
それが int とどう関係すんの?
32ビットって何バイト?
8ビットで1バイトだから……4バイト。あ、 long のサイズだね
コンピューターのビット数っていうのは、データを一番計算しやすいサイ
ズのこと
計算しやすい?
コンピューターの中には足し算とかする計算機があるわけ。その計算機が
一度に計算できる桁数がそのビット数になるってこと
つまりウィンドウズだと4バイトの数字を計算するのが一番楽?
1回で計算できるってことだね。そのサイズが〈何ビット〉とか表記され
て、そしてそれが int 型になるわけ
 int 型ってつまり一番計算しやすい型ってことね
そういうこと。だから、普通に整数を扱うときには int を使うのが一番
ってことだね
普通じゃないときって?
 int は大きすぎるから、小さい値を入れるときには無駄が出てくるって
ことで他の型を使うときとか、あと32ビット以外のパソコンで使う場合を
考えるときとかはね
それはないでしょ
そんなことないよ。ウィンドウズがバージョンアップして64ビットにな
るとか
げ、そんなことあんの!?
前にね。16ビットから32ビットに移るってときがあったんだよ
はー
だから、変数のサイズが大きな意味を持つってときには、 int は使わな
い方がいいかな
なんかむつかしいねー
難しいのはやっぱ、コンピューターの中身に関わってくることだからかな
そうよそうよ! なんかそーゆーこと考えなきゃいけないのって変くない?
車だって構造知らなくても動かせるじゃん
僕らプログラマーは車を作って整備する側、でしょ
あー、なるほど。って結構重荷ねそれ……
何を今さら。さて、とりあえず実数型は置いといて、整数について振り返
ってみましょう
振り替えるったって、1バイトの char 、2バイトの short 、4バイト
の long 、システム依存だけどウィンドウズなら4バイトの int 、ってと
こでしょ
そうそう。で、この各型、大きいサイズのものから小さいサイズのものへ
はそのまま変換できます

void char2long()
{
    char ch = 100;
    long l = ch;
    TRACE( "%d, %d\n", ch, l );
    // 100, 100
}

 char は1バイト、 long は4バイト、余裕よね
 ch の方に入っていた 100 がちゃんと l の方に入ってる、この点に注意
しつつ、今度は逆に、大きいのを小さい方に入れてみましょう

void long2char()
{
    long l = 10000;
    char ch = l;    // 警告!
    TRACE( "%d, %d\n", ch, l );
    // 16, 10000
}

あ、警告でちゃった

warning C4244: 'initializing' : 'long' から 'char' に変換しました。
 データが失われているかもしれません。

イニシャライズって〈初期化〉って意味よね
そ、ここでは ch 変数の初期化のときってこと。 ch の中に l の中身を
入れようとしたんだけど、l は long 型だから入りきらない、って警告
結果も全然違うし
 char には 10000 なんて数字入らないからね。で、そういう可能性があ
ることをVCが警告してくれてるってこと
確かにこれ、気付かなかったら怖いよね
だから、基本的にこういった〈大きいのを小さいのに入れる〉ってことを
しちゃダメ。無理な変換はできるだけ避けるようにね
はーい

/*
    Preview Next Story!
*/
そっかー、あたしたちは作ったり整備したりする側なんだー
ってことを考えすぎない方がいいかな?
なんで?
使う側を考えないとろくなものできないから
車もそうだもんね
というわけで次回
< Version 4.09 定数を使おう! >
につづく!
でも、ただの整備士が少し言ったくらいじゃ会社は変わらないんだよ……
また黄昏るしー
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。