C言語を用いているのですがlong型を宣言しても 32バイトまでしか表現できてません。
調べていると、環境によって、long型でも、32bitまでしか表現できないことがあるよようです。
https://marycore.jp/prog/c-lang/data-type-ranges-and-bit-byte-sizes/#ano-long-long
ちなみに、僕はWindows10を使っていて、MinGW32bitをダウンロードしました。
C++を用いてコードを書くと、long型で64bitまで表現できています。
下のコードで不具合をたしかめました。
コード1⃣
#include<stdio.h>
int main(void){
long X,D;
scanf("%ld %ld",&X,&D);
printf("%ld\n",X);
printf("%ld\n",D);
printf("%ld\n",X/D);
return 0;
}
実行結果
1000000000000000
100000000000000
-1530494976
276447232
-5
コード2⃣
#include<stdio.h>
int main(void){
long long X,D;
scanf("%ld %ld",&X,&D);
printf("%ld\n",X);
printf("%ld\n",D);
printf("%ld\n",X/D);
return 0;
}
実行結果
1000000000000000
100000000000000
-1530494976
276447232
65165966
質問1⃣ c言語で64bitまで表現するにはどうすればよいですか?
質問2⃣ コード1⃣とコード2⃣を比較して、long型でX,Dを宣言したときと、long long型でX Dを表現したときと、変数に格納されている値はX=-1530494976,D=276447232と同じなのに、X/Dの値が異なるのはどうしてですか?
質問1⃣だけでもよいので、教えてください。
回答2件
あなたの回答
tips
プレビュー