博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数值极值
阅读量:2224 次
发布时间:2019-05-08

本文共 2721 字,大约阅读时间需要 9 分钟。

1.引言

       在阅读别人的代码的时候,经常遇到最大的int值赋值为0x7FFFFFFF,最小的int值赋值为0x80000000

       最大值易于理解,但是最小值为什么是0x80000000

       首先注意,当给变量按16进制赋值的时候,是按补码形式赋值的。但是有一个特例就是0x80000000,这个是最小的负数,因为负数比正数表示的范围多1,所以0x80000000是没有原码的。

       看下面一段测试程序:

[cpp]
  1. int main ()  
  2. {  
  3.     int a=0x7FFFFFFF;  
  4.     int b=0x80000000;  
  5.     int c=0x80000007;  
  6.     int d=0xFFFFFFF9;//0xffffffff(-1)-0x6   
  7.     cout << "最大的正数:" << a << endl;  
  8.     cout << "最小的负数:" << b << endl;  
  9.     cout << "-7原码:" << c << endl;  
  10.     cout << "-7补码:" << d << endl;  
  11.     return 0;  
  12. }  
int main (){	int a=0x7FFFFFFF;	int b=0x80000000;	int c=0x80000007;	int d=0xFFFFFFF9;//0xffffffff(-1)-0x6	cout << "最大的正数:" << a << endl;	cout << "最小的负数:" << b << endl;	cout << "-7原码:" << c << endl;	cout << "-7补码:" << d << endl;	return 0;}

2.<limits>

       一般来说,数值型别的极值是一个与平台相关的特性。C++标准程序库通过template numeric_limits提供这些机制,取代传统的C语言所彩专用的预处理器常数。但是C语言版本仍然可用,其中正数常数定义于<limits.h>,浮点型常数定义于<float.h>。而在C++中所有型别机制都定义于<limits>

       下面给出一个测试程序:

[cpp]
  1. #include <limits>   
  2. #include <iostream>   
  3. using namespace std;  
  4.   
  5. int main ()  
  6. {  
  7.     cout<<"输出各类最大值"<<endl;  
  8.       
  9.     cout<< "int,max:" << numeric_limits<int>::max() << endl;  
  10.     cout<< "unsigned int,max:" <<  numeric_limits<unsigned int>::max() <<endl;   
  11.     cout<< "char,max:" << (int)numeric_limits<char>::max() << endl;  
  12.     cout<< "unsigned char,max:" << (unsigned int)numeric_limits<unsigned char>::max() << endl;  
  13.     cout<< "long,max:" << numeric_limits<long int>::max() <<endl;   
  14.     cout<< "float,max:" << numeric_limits<float>::max() <<endl<<endl;   
  15.           
  16.     cout<<"输出各类最小值"<<endl;  
  17.               
  18.     cout<< "int,min:" << numeric_limits<int>::min() << endl;  
  19.     cout<< "unsigned int,min:" << numeric_limits<unsigned int>::min() <<endl;  
  20.     cout<< "char,min:" << (int)numeric_limits<char>::min() << endl;  
  21.     cout<< "unsigned char,min:" << (unsigned int)numeric_limits<unsigned char>::min() << endl;  
  22.     cout<< "long,min:" << numeric_limits<long int>::min() <<endl;  
  23.     cout<< "float,min:" << numeric_limits<float>::min() <<endl<<endl;   
  24.           
  25.     cout<<"测试最大的int值上溢出之后的值"<<endl;  
  26.     int a=numeric_limits<int>::max();  
  27.     cout <<a<<endl;  
  28.     a++;  
  29.     cout <<a<<endl;  
  30.     cout<<"结果为最小的int值(负数)"<<endl<<endl;  
  31.           
  32.     cout<<"测试最小的int值下溢出之后的值"<<endl;   
  33.     a=numeric_limits<int>::min();  
  34.     cout <<a<<endl;  
  35.     a--;  
  36.     cout <<a<<endl;  
  37.     cout<<"结果为最大的int值(负数)"<<endl<<endl;  
  38.     return 0;  
  39. }  
#include 
#include
using namespace std;int main (){ cout<<"输出各类最大值"<
::max() << endl; cout<< "unsigned int,max:" << numeric_limits
::max() <
::max() << endl; cout<< "unsigned char,max:" << (unsigned int)numeric_limits
::max() << endl; cout<< "long,max:" << numeric_limits
::max() <
::max() <
<
::min() << endl; cout<< "unsigned int,min:" << numeric_limits
::min() <
::min() << endl; cout<< "unsigned char,min:" << (unsigned int)numeric_limits
::min() << endl; cout<< "long,min:" << numeric_limits
::min() <
::min() <
<
::max(); cout <
<
::min(); cout <
<

你可能感兴趣的文章
【JMeter】1.9上考试jmeter测试调试
查看>>
【虫师】【selenium】参数化
查看>>
【Python练习】文件引用用户名密码登录系统
查看>>
学习网站汇总
查看>>
【Loadrunner】性能测试报告实战
查看>>
【自动化测试】自动化测试需要了解的的一些事情。
查看>>
【selenium】selenium ide的安装过程
查看>>
【手机自动化测试】monkey测试
查看>>
【英语】软件开发常用英语词汇
查看>>
Fiddler 抓包工具总结
查看>>
【雅思】雅思需要购买和准备的学习资料
查看>>
【雅思】雅思写作作业(1)
查看>>
【雅思】【大作文】【审题作业】关于同不同意的审题作业(重点)
查看>>
【Loadrunner】通过loadrunner录制时候有事件但是白页无法出来登录页怎么办?
查看>>
【English】【托业】【四六级】写译高频词汇
查看>>
【托业】【新东方全真模拟】01~02-----P5~6
查看>>
【托业】【新东方全真模拟】03~04-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST05~06-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST09~10-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST07~08-----P5~6
查看>>