サイズ1の変数を作る
サイズ1の変数を作る
サイズが1の変数の宣言として bool を使っていたのですが
インターネットでbool は処理系によってはサイズが違うと書かれていたので
自分で0と1だけの変数を宣言することは可能なのでしょうか?
インターネットでbool は処理系によってはサイズが違うと書かれていたので
自分で0と1だけの変数を宣言することは可能なのでしょうか?
Re: サイズ1の変数を作る
1bitの変数を宣言することはできません。
boolのサイズが処理系依存であることに何か不都合があるのでしょうか。
boolのサイズが処理系依存であることに何か不都合があるのでしょうか。
Re: サイズ1の変数を作る
言語が指定されていませんが、C言語/C++ならenumを使うのはどうでしょうか? ただし、これは「サイズ1の変数」という(私は理解していない)条件を満たさないかもしれません。徒歩 さんが書きました:自分で0と1だけの変数を宣言することは可能なのでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: サイズ1の変数を作る
>boolのサイズが処理系依存であることに何か不都合があるのでしょうか。
場所によって製作環境が違うので対応させるとなると
何らかの方法でサイズを決める必要があると思いました。
>言語が指定されていませんが、C言語/C++ならenumを使うのはどうでしょうか?
C言語です。 ゲームのフラグデータ保存用で使うのために配列が大きくなってしまいどうにか小さくしようと
思って質問しました
場所によって製作環境が違うので対応させるとなると
何らかの方法でサイズを決める必要があると思いました。
>言語が指定されていませんが、C言語/C++ならenumを使うのはどうでしょうか?
C言語です。 ゲームのフラグデータ保存用で使うのために配列が大きくなってしまいどうにか小さくしようと
思って質問しました
Re: サイズ1の変数を作る
「サイズ1の変数」とはどういうことですか?
1バイトですか?1ワードですか?1セクタですか?1キロバイトですか?それとも…?
1バイトですか?1ワードですか?1セクタですか?1キロバイトですか?それとも…?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: サイズ1の変数を作る
unsigned char型ならパソコン向けのほとんどの環境では1バイト、8ビットだと思う[要出典]ので、
unsigned char型の変数にビット演算を利用してフラグを詰める、というのはどうでしょうか?
unsigned char型の変数にビット演算を利用してフラグを詰める、というのはどうでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: サイズ1の変数を作る
具体的にどれくらいのデータサイズになるのでしょうか。
本当にビットを詰めなければならないほど余裕が無いのですか?
本当にビットを詰めなければならないほど余裕が無いのですか?
Re: サイズ1の変数を作る
>unsigned char型の変数にビット演算を利用してフラグを詰める、というのはどうでしょうか?
ビット演算を利用してフラグを詰めることに
まったく気づきませんでした。ありがとうございます。
>本当にビットを詰めなければならないほど余裕が無いのですか?
余裕が無いというほどではありませんが
フラグだけで1000個ほどになるので サイズが小さくて読書きし易い形に出来ることが目標でした。
>もしかして、PICなどのマイコンの開発でしょうか?
RPGゲームを作っています。
ビット演算を利用してフラグを詰めることに
まったく気づきませんでした。ありがとうございます。
>本当にビットを詰めなければならないほど余裕が無いのですか?
余裕が無いというほどではありませんが
フラグだけで1000個ほどになるので サイズが小さくて読書きし易い形に出来ることが目標でした。
>もしかして、PICなどのマイコンの開発でしょうか?
RPGゲームを作っています。
Re: サイズ1の変数を作る
ビットを詰めると逆に読み書きが難しくなります。
ファイルのサイズを小さくしたいのであればビットを詰めるのではなくgzipなどを利用したほうが良いと思います。
ファイルのサイズを小さくしたいのであればビットを詰めるのではなくgzipなどを利用したほうが良いと思います。
Re: サイズ1の変数を作る
ビットフィールドというものもあります。
環境依存が強いので外部記憶には向きませんが。
まあ、char配列の先頭から何ビット目を読み書きするという関数でも用意すれば済む話ですね。
マクロ等でどこを読み書きしてるか分かるようにすれば可読性もさほど悪くないですし。
環境依存が強いので外部記憶には向きませんが。
まあ、char配列の先頭から何ビット目を読み書きするという関数でも用意すれば済む話ですね。
マクロ等でどこを読み書きしてるか分かるようにすれば可読性もさほど悪くないですし。
Re: サイズ1の変数を作る
マイコン開発を否定しませんでしたね。徒歩 さんが書きました:>本当にビットを詰めなければならないほど余裕が無いのですか?
余裕が無いというほどではありませんが
フラグだけで1000個ほどになるので サイズが小さくて読書きし易い形に出来ることが目標でした。
>もしかして、PICなどのマイコンの開発でしょうか?
RPGゲームを作っています。
自前でSDカードに書き込むときの実装をしやすくするため、データのサイズを1セクタに収めたい、ということでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: サイズ1の変数を作る
パソコン前提なら1byte単位でON/OFF記録しても1000個x1byteでたかが1KB弱です。すごく小さなセーブデータだと思います。
たとえば、初代PSのメモリカードの1ブロックが8KBですから余裕で入るサイズですね。
このぐらいであれば、PSの開発者でもビットは使わないと思いますよ。
たとえば、初代PSのメモリカードの1ブロックが8KBですから余裕で入るサイズですね。
このぐらいであれば、PSの開発者でもビットは使わないと思いますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: サイズ1の変数を作る
フラグだけで1000個ほどになる、というのはフラグ以外にデータはないということになるのでしょうか。
最後に編集したユーザー ISLe on 2014年4月05日(土) 23:59 [ 編集 1 回目 ]
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: サイズ1の変数を作る
フラグ以外の容量がデカイのならそちらを問題にすべきかと思いますが、その場合でも1KB程度のフラグセーブデータは許容できるのではと思いました。ISLe さんが書きました:フラグだけで1000個ほどになる、というのはフラグ以外にデータはないということになるのでしょうか。
徒歩さんに言いたいのは、手間かけて容量を減らすよりも扱いやすくてデバッグしやすい方向でまとめた方が後々良いことばかりです。と言うことです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: サイズ1の変数を作る
アクセス用の関数1つ挟むだけで済む話で、手間も掛からないのではないでしょうか。
配列に直接アクセスするよりも関数経由のほうが実装を隠蔽化できて拡張の幅が広がると思います。
わたしはロード・セーブでベタに読み書きするのは良くないと思うので、外部と内部の形式は切り離すべきと考えます。
1バイトずつでも1ビットずつでも自由に切り替えられるように作られているほうがデバッグもしやすいと思います。
配列に直接アクセスするよりも関数経由のほうが実装を隠蔽化できて拡張の幅が広がると思います。
わたしはロード・セーブでベタに読み書きするのは良くないと思うので、外部と内部の形式は切り離すべきと考えます。
1バイトずつでも1ビットずつでも自由に切り替えられるように作られているほうがデバッグもしやすいと思います。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: サイズ1の変数を作る
アクセスレベルの切り離す話と、セーブデータを1bitに押し込める話は別だと私は考えます。
もちろん、アクセスレベルはぜひ切り離すべきだと思っています。
ただ、1bitのデータの検証はバグった時にやはり面倒だと思う次第です。
少なくとも、実装レベルで1バイトづつセーブするよりコードが増えます。
わざわざ書かなくて良いコードを書いてるように思えてなりません。
必要ならすべきです。必要ないなら徹底して私は避けたいです。
もちろん、アクセスレベルはぜひ切り離すべきだと思っています。
ただ、1bitのデータの検証はバグった時にやはり面倒だと思う次第です。
少なくとも、実装レベルで1バイトづつセーブするよりコードが増えます。
わざわざ書かなくて良いコードを書いてるように思えてなりません。
必要ならすべきです。必要ないなら徹底して私は避けたいです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: サイズ1の変数を作る
わたしは外部とやり取りするデータのサイズはユーザー体験に直結すると思っているので質問者さんの意向を尊重したいです。
これ以上はポリシーの問題なので議論は避けたいと思います。
これ以上はポリシーの問題なので議論は避けたいと思います。