《以C程序角度探究计算机里int 类型的存储与最大数最小数,为什么负数补码存储》-原创
一:c语言运算int最大值,最小值
首先让计算机自己计算int类型的最大值。当然我s的初值取得很大,有事后诸葛亮的嫌疑,最好的从初值设为1.但是运行时间太长 程序代码如下
int main() {
time_t start,end; start=clock();
int s=2147400000;//为什么初值取这么大呢?因为太小,运算时间太长 while(1) { tt: s+=1;
printf(\值=%d\\n\
if(s<0) {printf(\数据最大值=%d\\n\ break; }
if(s>0) goto tt; }
end=clock();
printf(\程序运行时间为:%lf\\n秒\return 0; } 运算结果
当程序执行到2147483647,再加1时候,就变成负数,那么我们知道这个时候溢出来。 所以int在我编译环境下,最大数值就是这个数。
下面我们写一个类似的程序,来输出int类型最小负数。
下面以s赋值负值,一直减1操作,循环,直到出现正数,那么就是负数的最小值。负数最大值就是-1,自然而然。代码如下
int main()
{//计算最小值 time_t start,end; start=clock();
int s=-2147480000;//为什么初值取这么大呢?因为太小,运算时间太长 while(1) { tt: s-=1;
printf(\值=%d\\n\
if(s>0) {printf(\数据最小值=%d\\n\ break; }
if(s<0) goto tt;
}
end=clock();
printf(\程序运行时间为:%lf\\n秒\return 0; } 执行结果
由此我们知道最小值就是我们在第一个计算最大值的时候,溢出的第一个负数。
二:计算出来最大值,最小负数之后,可以用下面程序,进一步测试。
1:首先我想知道,我采用的编译环境下,int类型采用几个字节存储。 sizeof(int)可以告诉我结果,是4个字节,32位。
2:最大的数,是不是采用0xffff ffff ffff ffff表示的呢?我也想知道,所有测试下。 3:计算机存储负整数,最高位是符号位,来区分正整数负整数,那么0x8000 0000 0000 0001是表示-1么?
这是我想知道的问题,所以写下列程序测试。
#include
//计算机里int类型的存储与数据范围,溢出问题 using namespace std;
int main() {
cout<<\类型占用字节\判断当前编译环境下int存储的字节数,输出为4,4字节,32位
int i=0x00000001; //定义一个int类型变量,32位 cout<
i=i<<1; //左移一位,正常,无溢出 cout<
//最大的数是不是0xffffffff呢?输出看一下就知道 i=0xffffffff;
cout<<\表示的数是最大整数么?i=\输出结果是-1(如果你学习过计算机原理,负数二进制表示换算成十进制,全部取反,+1) //最大整数是多少? int j=0x80000001;
cout<<\是-1么?j=\
i=0x7fffffff; //最大正数范围,0b0111 1111 1111 1111 cout<<\表示的数=\ j=i+1;
cout<<\表示的数=\之后溢出,0x80000000
i=0x80000000; //最高位是1,符号位,其余31位都是0,取反31位都是1,再加上1,0x
cout<<\表示的数=\最小值
相关推荐: