32桁のマシンでunsigned intの最大値とintの最大値の解決方法を求めます。

1359 ワード


#include <stdio.h>
int main(int argc, char *argv[])
{
 unsigned int max_int = 0-1;
 printf("The max value of unsigned int on 32 machine: %u/n", max_int);
}

#include <stdio.h>
int main(int argc, char *argv[])
{
 unsigned int max_int = 0-1;
 printf("The max value of unsigned int on 32 machine: %u/n", max_int);
}
gccコンパイル後:int_sizoff 1.c:関数'main'でint_sizoff 1.5:警告:整数オーバーフロー実行後:The max value of int 32 machine:4294967295 VC 6.0とjavaコンパイル後、エラーがありません。運転後:The max value of int 32 machine:4294967295

#include <stdio.h>
int main(int argc, char *argv[])
{
 int max_int = (1<<31)-1;
 printf("The max value of int on 32 machine: %d/n", max_int);
}
は、そのintをシンボル型のプログラムとして次のように書いています。

#include <stdio.h>
int main(int argc, char *argv[])
{
 int max_int = (1<<31)-1;
 printf("The max value of int on 32 machine: %d/n", max_int);
}
gccをコンパイルした後:int_sizoff 1.c:関数'main'でint_警告:整数オーバーフロー実行後:The max value of int 32 machine:2147483647 VC 6.0とjavaコンパイル後、エラーがありません。運転後:The max value of int 32 machine:2147483647 intの最上位は符号ビットです。