Debug日志:Dev C++ 5.11的 int 型边界测试

int 型变量在内存中占4个字节,这在以前已经用 sizeof 函数测试过。现在做更加细化的测试:

#include <iostream>
using namespace std;

int main(){
	cout << (1 << 31);
	return 0;
}

测试结果:


经验算,-2147483648正好是“负2的31次方”。实际上,在4个字节、32个比特位中,只有最左端的第31位(最右端为第0位)是1,其余全都是0 。为了验证这个猜想,代码作如下修改:

#include <iostream>
using namespace std;

int main(){
	cout << ((1 << 31) & 2147483647);
	return 0;
}

测试结果:


2147483647是2的31次方减1,在32个比特位中,除了最左端的第31位是0,其余31个比特位(从第0位到第30位)全都是1,按位相与以后,正好是0.


当代码写成1左移32位时,编译器报错:

#include <iostream>
using namespace std;

int main(){
	cout << (1 << 32);//[Warning] left shift count >= width of type
	return 0;
}
表示越界了。由此可断定:int型最右端的第31位,即最高位,其实是符号位,该位置1、其余位全0时,为int型能表示的负值的最大值 -2147483648。绝对值再大的负数就溢出了。验证代码如下:

#include <iostream>
using namespace std;

int main(){
	int i = -2147483649;//[Warning] overflow in implicit constant conversion [-Woverflow]
	cout << i;
	return 0;
}

而当最高位置0、其余位全1时,为int型能表示的正数的最大值 2147483647 。若试图表示正数2147483648,则会自动变成 - 2147483648 。验证代码如下:

#include <iostream>
using namespace std;

int main(){
	int i = 2147483648;
	cout << i;
	return 0;
}

i 减一个1 以后就正常了:

#include <iostream>
using namespace std;

int main(){
	int i = 2147483647;
	cout << i;
	return 0;
}


由此可得结论:

1,int型在Dev C++ 5.11编译器环境下,占4个字节、32个比特位的内存;

2,int型最高位是符号位,1表示负数,0表示正数;

3,int型变量的表示范围为: - 2147483648 ~ + 2147483647 。


=============================分割线=================================

得到 int 型正数最大值的方法:对负数最大值按位取反:

#include <iostream>
using namespace std;

int main(){
	cout << ~(1 << 31);
	return 0;
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dev C 5.11 是一款轻量化的 C/C++ 桌面 IDE,它具有即开即用的特点,无需额外配置 GCC,常常被用于 C/C++ 语言基础的学习。你可以通过以下步骤来使用 Dev C 5.11: 1. 点击下载链接并下载完整的安装包。 2. 解压下载的安装包,并双击运行 "Dev-Cpp 5.11 TDM-GCC 4.9.2Setup.exe",按照默认设置进行安装。 3. 打开 Dev C 开发环境。 4. 新建一个源文件,你可以使用快捷键 Ctrl + N 或者点击 File 菜单中的 Source File 子菜单来创建。 5. 在源文件中输入代码,使用快捷键 Ctrl + S 进行保存,使用快捷键 F9 进行编译,或者点击 Execute 菜单中的 Compile 子菜单。 6. 如果编译出现错误,双击错误信息定位到错误行(例如缺少包含头文件 cmath),进行改正。然后按下 F10 进行执行(为了避免运行结果一闪而过,在 main 函数的最后添加语句 "system("pause");"。如果在 OJ 提交,需要注释掉这句,即 //system("pause");)。 7. 在调试之前,将 "产生调试信息" 设置为 Yes,并点击 OK(在 Tools 菜单中选择 Compile Options 子菜单,在 Settings 选项卡的 Linker 子选项卡中进行设置)。 8. 如果发现运行结果有误,进行调试:设置断点(在代码的相应行上点击行号),按下 F5 或点击快捷菜单中的“√”开始调试。 9. 使用 F7 或点击左下角 Debug 区域的“Next line”进行单步执行。 10. 在代码的左边空白区域右键,选择 "Add watch" 来添加监视量(例如输入 i,点击 OK)。 11. 如果发现错误并进行更正,使用 F6 或点击 "Stop Execution" 或点击快捷菜单中的“×”来结束调试。 12. 在编写下一个程序之前,关闭所有打开的文件(File -> Close All)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值