ここで尋ねられたいくつかの質問から型について理解したのは、C++ ではchar
常に1
バイトですが、ビット数はシステムごとに異なる可能性があるということです。
sizeof()
演算子はchar
単位として使用するため、sizeof(char)
常にC++ のバイト単位です (ローカル マシンのアドレスの最小単位の1
ビット数を取ります) 。 RAM 内の変数の場合、ファイルに書き込まれるデータの最小単位としての変数のサイズは、RAM から読み取られる値のサイズである必要があり、ファイルからの読み取りの場合はその逆になります。次に、次のようなことを試みた場合、データがビット単位で書き込まれない可能性があると言えますか。fstream()
8
8
ofstream file;
file.open("blabla.bin",ios::out|ios::binary);
char a[]="asdfghjkkll";
file.seekp(0);
file.write((char*)a,sizeof(a)-1);
file.close();
常にchar
既存の標準8
ビットのバイト単位で使用される場合を除き、データのヒープが 16 ビット マシンでファイルに書き込まれ、32 ビット マシンで読み取られるとどうなりますか? または、OS 依存のテキスト モードを使用する必要がありますか? そうでなければ、私は真実とは何かを誤解していますか?
編集:間違いを修正しました。
警告してくれてありがとう。
Edit2:私のシステムは64
ビットですが、char
タイプのビット数を取得します。何が問題なの8
ですか? 8
falseの結果を取得する方法はありますか? 変数をビットごとの演算子で可能なサイズを超え00000...
てシフトすることで を取得しました。変数のすべてのビットがゼロであることを保証した後、それを反転することで を取得しました。そしてそれがゼロになるまでシフトします。シフトするとゼロになるので、下で終了するループのインデックスからビット数を取得できます。char
111...
its size time
char zero,test;
zero<<=64; //hoping that system is not more than 64 bit(most likely)
test=~zero; //we have a 111...
int i;
for(i=0; test!=zero; i++)
test=test<<1;
i
ループ後の変数の値はビット数型です。char
これによると、結果は となり8
ます。私の最後の質問は次のとおりです。コンピューターがファイルストリームchar
内のポインターをアドレス指定する方法が、少なくともビットである標準タイプと異なるため、ファイルシステムのバイトとタイプは異なるデータタイプですか? では、バックグラウンドで何が起こっているのでしょうか。
Edit3:なぜこれらのマイナス? 私の間違いは何ですか?質問は十分に明確ではありませんか?私の質問はばかげているかもしれませんが、私の質問に関連する回答がないのはなぜですか?char
8