
int型などは可変長型なのでサイズは16ビット、32ビット、
64ビットなどC言語だと環境によって異なってきますよね?
さらにlong型は32ビット64ビットの可変長でも、
long long型は64ビット固定長型であったり、
long int型は32ビットが保証値だとか、
shortを付けるとサイズが小さくなるのかだとか、
非常に煩わしいのでどの環境でも常に同じサイズで定義できるよう
全てtypedefで固定長にしたいと考えています。
(できれば__int32等は言語仕様では無いので使いたくないので…)
ですが検索するとどうも情報が各サイトごとに微妙に違ってたりして
私には正しいかどうかの判断が付かなくなってしまいました。
(C言語以外もあったのでそのせいかもしれませんが;)
以下のように、8ビット、16ビット、32ビット、64ビット、
32ビット浮動小数、64ビット浮動小数を定義したいのですが
どうかアドバイスをいただけないでしょうか?
宜しくお願い致します
typedef int8 signed char; // -127~127
typedef int16 //16ビット固定整数
typedef int32 //32ビット固定整数
typedef int64 //64ビット固定整数
typedef dec32 //32ビット固定浮動小数
typedef dec64 //64ビット固定浮動小数
No.1ベストアンサー
- 回答日時:
可変長という表現も変ですが、C言語の型のサイズは、すべて処理系定義です。
charもshortもintもlongもlong longもfloatもdouobleもlong doubleも例外はありません。_Boolだけは確実に1ビットですが、_Bool型が占有するメモリサイズは処理系定義になります。どの処理系でも常に同じサイズで定義するのはC言語では不可能です。というのも、8ビットとか16ビットとかの型が存在しない処理系もあるからです。
現実的には、あらゆる処理系を網羅するのではなく、自分が対象とする処理系を特定し、その間で有効な手段を検討するのが一番です。
お勧めの方法は、<stdint.h>で定義される、int8_t, uint8_t, int16_t, uint16_t, ..., int64_t, uint64_tなどを使うことです。
これらは、サイズが保証されるだけでなく、負の値の内部表現が2の補数であることも保証されます。ただし、処理系によっては一部または全部の型が定義されないことがあります。思い切ってそれらの処理系を切り捨てられるのであれば、一番現実的な解決策かと思います。
なお、<stdint.h>はC99で導入されたヘッダですので、C99に未対応の処理系や非標準処理系には存在しません。それらの古い、または方言である処理系は、思い切って切り捨てるか、それが無理なら、<stdint.h>を自作する必要があります。
No.2
- 回答日時:
バイト数だけなら char とその仲間が 1バイトと決まっていますが, 実際には「1バイト」も「8ビット以上」となっているだけなので, 「全ての処理系でビット数を固定する」のは無理がありますね.
まあ, 自分で全部書けばいいんですが.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数の初期化について
-
VBAの変数のデータ型を変更する...
-
VBAで符号無し整数
-
long型のデータをバイト型の配...
-
C言語 配列の長さの上限
-
C言語において、 配列要素をひ...
-
C言語のintとcharの違いってな...
-
関数から配列を返すには?
-
C言語の2次元配列 容量が大き...
-
配列の要素数に変数を入れたい...
-
【速いブラインドタッチ】手を...
-
なぜ配列は0から始まるのです...
-
char 文字列型 の表現範囲が-12...
-
C言語のプログラムについてです
-
C++のnewで確保したメモリーの...
-
WSH(VBS)でJSONの文字列を読み...
-
c言語
-
DLLで同じメモリ領域を参照する...
-
fgetsで配列に数字を入れる。
-
連結リスト 要素の入れ替え
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
「#undef」と「#define」の使い...
-
VBAの変数のデータ型を変更する...
-
typedefをプログラム中で解除す...
-
値が代入されてない時
-
構造体のデータを丸ごとコピー...
-
VBAにてcolorindexを変数に格納...
-
整数から16進数への変換 現在c...
-
変数の初期化について
-
long型のデータをバイト型の配...
-
1バイトデータの読み出しについて
-
命名規則 VB 構造体
-
異なる構造体のデータのコピー
-
VBAで符号無し整数
-
C言語 構造体の中に共用体を定...
-
日付チェック関数について
-
構造体のポインタにNULLが入らない
-
ビット演算について
-
VBAで変数定義を変更する方法
おすすめ情報