C言語の拾い直しの道(2)
2752 ワード
なぜ32ビットオペレーティングシステムは最大4 Gメモリしかサポートできないのですか?
32ビットオペレーティングシステム、32ビットCPU、アドレス空間ビット2^32次方、計算は4294967296バイトで、4 G、32ビットシステムは最大4 G空間をサポートし、32ビットシステムが4 G以上の空間をサポートしたい場合は、PAEの特殊なコアを使って、特殊な方法でアクセスし、
64ビットのオペレーティングシステムは64ビットのCPUに協力して、アドレス空間は2^64次方で、計算するのは18446744073709551616バイトです
10進法をバイナリ32ビットに変換する方法
ポインタの理解
C言語ポインタ定義
c言語ポインタ空間
このセグメントコードはよく述べられています.私が宣言したint、オペレーティングシステムは私たちのために4バイトのメモリ空間を開きましたが、私たちは強制的にcharに変換しました.では、私が付与した4つのcharはちょうど前にintオペレーティングシステムが私のために開いた空間をカバーしています.だから、私たちはこのように付与した後、abcdの4つのASCIIコードを印刷します.
32ビットオペレーティングシステム、32ビットCPU、アドレス空間ビット2^32次方、計算は4294967296バイトで、4 G、32ビットシステムは最大4 G空間をサポートし、32ビットシステムが4 G以上の空間をサポートしたい場合は、PAEの特殊なコアを使って、特殊な方法でアクセスし、
64ビットのオペレーティングシステムは64ビットのCPUに協力して、アドレス空間は2^64次方で、計算するのは18446744073709551616バイトです
10進法をバイナリ32ビットに変換する方法
#include
using namespace std;
int main(){
int a[32]={0};
int n = 0;
int num;
scanf("%d",&num);
while(num){
a[++n] = num%2;
num = num/2;
}
for(int i = 31;i>0;i--){
printf("%d",a[i]);
}
}
ポインタの理解
C言語ポインタ定義
int a;
int *p = &a; //
*p = 5;
c言語ポインタ空間
#include
using namespace std;
int main(){
int a;
char *p = (char*)&a;
*p = 'a';
*(p+1) = 'b';
*(p+2) = 'c';
*(p+3) = 'd';
printf("%x
",a); //64636261
// ,
}
このセグメントコードはよく述べられています.私が宣言したint、オペレーティングシステムは私たちのために4バイトのメモリ空間を開きましたが、私たちは強制的にcharに変換しました.では、私が付与した4つのcharはちょうど前にintオペレーティングシステムが私のために開いた空間をカバーしています.だから、私たちはこのように付与した後、abcdの4つのASCIIコードを印刷します.