サイズ1の変数を作る

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
徒歩

サイズ1の変数を作る

#1

投稿記事 by 徒歩 » 10年前

サイズが1の変数の宣言として bool を使っていたのですが
インターネットでbool は処理系によってはサイズが違うと書かれていたので
自分で0と1だけの変数を宣言することは可能なのでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: サイズ1の変数を作る

#2

投稿記事 by h2so5 » 10年前

1bitの変数を宣言することはできません。
boolのサイズが処理系依存であることに何か不都合があるのでしょうか。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: サイズ1の変数を作る

#3

投稿記事 by みけCAT » 10年前

徒歩 さんが書きました:自分で0と1だけの変数を宣言することは可能なのでしょうか?
言語が指定されていませんが、C言語/C++ならenumを使うのはどうでしょうか?

コード:

enum ZeroOrOne {
	ZERO,ONE
};
ただし、これは「サイズ1の変数」という(私は理解していない)条件を満たさないかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

徒歩

Re: サイズ1の変数を作る

#4

投稿記事 by 徒歩 » 10年前

>boolのサイズが処理系依存であることに何か不都合があるのでしょうか。

場所によって製作環境が違うので対応させるとなると
何らかの方法でサイズを決める必要があると思いました。


>言語が指定されていませんが、C言語/C++ならenumを使うのはどうでしょうか?

C言語です。 ゲームのフラグデータ保存用で使うのために配列が大きくなってしまいどうにか小さくしようと
思って質問しました

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: サイズ1の変数を作る

#5

投稿記事 by みけCAT » 10年前

「サイズ1の変数」とはどういうことですか?
1バイトですか?1ワードですか?1セクタですか?1キロバイトですか?それとも…?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

徒歩

Re: サイズ1の変数を作る

#6

投稿記事 by 徒歩 » 10年前

フラグデータ用なので出来るだけ1ビットに近いもので出来るようにしたいです

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: サイズ1の変数を作る

#7

投稿記事 by みけCAT » 10年前

unsigned char型ならパソコン向けのほとんどの環境では1バイト、8ビットだと思う[要出典]ので、
unsigned char型の変数にビット演算を利用してフラグを詰める、というのはどうでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: サイズ1の変数を作る

#8

投稿記事 by h2so5 » 10年前

具体的にどれくらいのデータサイズになるのでしょうか。
本当にビットを詰めなければならないほど余裕が無いのですか?

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: サイズ1の変数を作る

#9

投稿記事 by みけCAT » 10年前

もしかして、PICなどのマイコンの開発でしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

徒歩

Re: サイズ1の変数を作る

#10

投稿記事 by 徒歩 » 10年前

>unsigned char型の変数にビット演算を利用してフラグを詰める、というのはどうでしょうか?

ビット演算を利用してフラグを詰めることに
まったく気づきませんでした。ありがとうございます。

>本当にビットを詰めなければならないほど余裕が無いのですか?

余裕が無いというほどではありませんが
フラグだけで1000個ほどになるので サイズが小さくて読書きし易い形に出来ることが目標でした。

>もしかして、PICなどのマイコンの開発でしょうか?

RPGゲームを作っています。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: サイズ1の変数を作る

#11

投稿記事 by h2so5 » 10年前

ビットを詰めると逆に読み書きが難しくなります。
ファイルのサイズを小さくしたいのであればビットを詰めるのではなくgzipなどを利用したほうが良いと思います。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: サイズ1の変数を作る

#12

投稿記事 by ISLe » 10年前

ビットフィールドというものもあります。
環境依存が強いので外部記憶には向きませんが。

まあ、char配列の先頭から何ビット目を読み書きするという関数でも用意すれば済む話ですね。
マクロ等でどこを読み書きしてるか分かるようにすれば可読性もさほど悪くないですし。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: サイズ1の変数を作る

#13

投稿記事 by みけCAT » 10年前

徒歩 さんが書きました:>本当にビットを詰めなければならないほど余裕が無いのですか?

余裕が無いというほどではありませんが
フラグだけで1000個ほどになるので サイズが小さくて読書きし易い形に出来ることが目標でした。

>もしかして、PICなどのマイコンの開発でしょうか?

RPGゲームを作っています。
マイコン開発を否定しませんでしたね。
自前でSDカードに書き込むときの実装をしやすくするため、データのサイズを1セクタに収めたい、ということでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: サイズ1の変数を作る

#14

投稿記事 by softya(ソフト屋) » 10年前

パソコン前提なら1byte単位でON/OFF記録しても1000個x1byteでたかが1KB弱です。すごく小さなセーブデータだと思います。
たとえば、初代PSのメモリカードの1ブロックが8KBですから余裕で入るサイズですね。
このぐらいであれば、PSの開発者でもビットは使わないと思いますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: サイズ1の変数を作る

#15

投稿記事 by ISLe » 10年前

フラグだけで1000個ほどになる、というのはフラグ以外にデータはないということになるのでしょうか。
最後に編集したユーザー ISLe on 2014年4月05日(土) 23:59 [ 編集 1 回目 ]

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: サイズ1の変数を作る

#16

投稿記事 by softya(ソフト屋) » 10年前

ISLe さんが書きました:フラグだけで1000個ほどになる、というのはフラグ以外にデータはないということになるのでしょうか。
フラグ以外の容量がデカイのならそちらを問題にすべきかと思いますが、その場合でも1KB程度のフラグセーブデータは許容できるのではと思いました。
徒歩さんに言いたいのは、手間かけて容量を減らすよりも扱いやすくてデバッグしやすい方向でまとめた方が後々良いことばかりです。と言うことです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: サイズ1の変数を作る

#17

投稿記事 by ISLe » 10年前

アクセス用の関数1つ挟むだけで済む話で、手間も掛からないのではないでしょうか。

配列に直接アクセスするよりも関数経由のほうが実装を隠蔽化できて拡張の幅が広がると思います。

わたしはロード・セーブでベタに読み書きするのは良くないと思うので、外部と内部の形式は切り離すべきと考えます。
1バイトずつでも1ビットずつでも自由に切り替えられるように作られているほうがデバッグもしやすいと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: サイズ1の変数を作る

#18

投稿記事 by softya(ソフト屋) » 10年前

アクセスレベルの切り離す話と、セーブデータを1bitに押し込める話は別だと私は考えます。
もちろん、アクセスレベルはぜひ切り離すべきだと思っています。

ただ、1bitのデータの検証はバグった時にやはり面倒だと思う次第です。
少なくとも、実装レベルで1バイトづつセーブするよりコードが増えます。
わざわざ書かなくて良いコードを書いてるように思えてなりません。
必要ならすべきです。必要ないなら徹底して私は避けたいです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: サイズ1の変数を作る

#19

投稿記事 by ISLe » 10年前

わたしは外部とやり取りするデータのサイズはユーザー体験に直結すると思っているので質問者さんの意向を尊重したいです。
これ以上はポリシーの問題なので議論は避けたいと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る