第一范文网 - 专业文章范例文档资料分享平台

以C程序角度探究计算机里int 类型的存储与最大数最小数,为什么负数补码存储

来源:用户分享 时间:2025/5/15 12:38:53 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

《以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<<\表示的数=\最小值

以C程序角度探究计算机里int 类型的存储与最大数最小数,为什么负数补码存储.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c439bc5l3p5036ax5ujy3_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top