表紙
/
自作ソフト
/
日記
/
宝箱
/
サイト情報
/
検索
一般 / 新C言語 / 駄文 |
| |
|
|
5.1 _Bool 型 多くの人が使っていたけど、言語仕様の中では規定されていなかった...。今度の新しい C 言語では、それが仕様に取り込まれました。それとは bool 型です。多くの人が bool や _bool, BOOL, Bool などと typedef あるいは define をして使用していますが、とうぜん各人によってその名前はバラバラでした。したがって他人の作ったライブラリを利用するとき定義が衝突したりしり、ソースプログラム上で表記の統一がとれなくなったりして、問題が発生しました。 今度の C 言語では新しい整数型 _Bool 型を導入することでその問題を解決します。この型は 0 と 1 が入れば十分な大きさとされており、必ずしも int 型と同じサイズであるとは限りません。簡単に性質を説明すると次のようになります。
5.2 long long int 型 C 言語が初めて作成されてから、現在までかなりの時間が経過しています。それに従い計算機も進化してきました。例えば、64 bit のアドレス空間を持つ CPU の登場です。64bit あれば 18E(エクサ)もの巨大な数を表すことができます。従来の C 言語のコンパイラではそのような巨大な数を表現することは想定していませんでした。そこで、今回新たに long long int という、long 型よりもさらに大きな数を表現できる型が新設されました。具体的な大きさなどは次の通りです。
limits.h は limits.h で定義されている名称を示しています。保証値はどの環境へ行っても最低限保証される値を示しています。実は、この long long int 型については、日本側から、ROMプログラムを作成するときなどはこんな巨大な数は必要ないのになんでオプションでないのか理由をきちんと書いて欲しいという提案も出たりしました。 さてこの long long int 型は gcc や一部の UNIX ではすでに実装されているところもあるので、今回新たに追加された仕様とは知らず、「long long int 型は(従来の) C 言語の仕様で決められているんでしょ」とか言う人もいるかもしれません。 5.3 long long int 型の定数 今回の C 言語では、long long int 型が新設されています。もちろん整数型なのでそれに応じた定数も記述できるようにする必要があります。従来の C 言語では整数の後ろに型を表す記号をつけて、それをあらわしていました。long long int 型はそれを自然に拡張した表記法を用います。
long long int 型は LL または、ll というサフィックスを用いて表現します。Ll とか lL という表記は不可です。u をつけると符号なしという意味になります。u と l, ll の間では大文字小文字は統一されている必要はありません。また、初心者は '0' や 'a' という表記は char 型だと思っていたりするので注意する必要があります。それは間違いなく int 型の定数です。ただし、C++ 言語においてはその限りではありません。 ちなみに long long int 型を printf や scanf で用いる場合に使用する型指定の記号は 'll' を用います。例えば、"value=%lld" という風に書きます。 5.4 整数除算 整数の除算に何か問題があるの?そう思う人も多いでしょう。しかし現在の C 言語では、整数の除算に関しては移植性がありません。どういう場合に移植性がないのかといえば、整数を割るときのどちらかのオペランドが負であった場合です。 現在の C 言語の規格では両方のオペランドが正の数の場合、商は小数点以下を捨てた数になることになっています。例えば、1/2の場合、正しい値は、0.5 ですが、小数点以下を捨てるので商は 0、余りは 1になります。余りは、(a/b)*b + a%b == a を満たす値となります。 しかし、どちらか一方の数が負の場合、その結果は実装依存になっています。例えば、-1/2 の正しい結果は、-0.5 ですが、環境によって商0余り-1になったり、商-1余り1になったりします。 今回の新しい C 言語では、割り算の結果はすべて 0 方向に切り捨てることになりました。例えば、-1/2 では結果が、-0.5 ですが、0 方向に切り捨てるので、商は 0 になります。すると余りは、-1 ということになります。これがすべての環境で保証されることになりました。 |
|
| ||||
表紙
-
著作権
-
注意事項
-
リンクについて
-
404 エラーについて
(c)1999-2014 seclan. All rights reserved. |