数值极值
来源:互联网 发布:网络歌手紫菱所有歌曲 编辑:程序博客网 时间:2024/05/01 06:05
1.引言
在阅读别人的代码的时候,经常遇到最大的int值赋值为0x7FFFFFFF,最小的int值赋值为0x80000000。
最大值易于理解,但是最小值为什么是0x80000000?
首先注意,当给变量按16进制赋值的时候,是按补码形式赋值的。但是有一个特例就是0x80000000,这个是最小的负数,因为负数比正数表示的范围多1,所以0x80000000是没有原码的。
看下面一段测试程序:
- 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;
- }
int main (){int a=0x7FFFFFFF;int b=0x80000000;int c=0x80000007;int d=0xFFFFFFF9;//0xffffffff(-1)-0x6cout << "最大的正数:" << 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>。
下面给出一个测试程序:
- #include <limits>
- #include <iostream>
- using namespace std;
- int main ()
- {
- cout<<"输出各类最大值"<<endl;
- cout<< "int,max:" << numeric_limits<int>::max() << endl;
- cout<< "unsigned int,max:" << numeric_limits<unsigned int>::max() <<endl;
- cout<< "char,max:" << (int)numeric_limits<char>::max() << endl;
- cout<< "unsigned char,max:" << (unsigned int)numeric_limits<unsigned char>::max() << endl;
- cout<< "long,max:" << numeric_limits<long int>::max() <<endl;
- cout<< "float,max:" << numeric_limits<float>::max() <<endl<<endl;
- cout<<"输出各类最小值"<<endl;
- cout<< "int,min:" << numeric_limits<int>::min() << endl;
- cout<< "unsigned int,min:" << numeric_limits<unsigned int>::min() <<endl;
- cout<< "char,min:" << (int)numeric_limits<char>::min() << endl;
- cout<< "unsigned char,min:" << (unsigned int)numeric_limits<unsigned char>::min() << endl;
- cout<< "long,min:" << numeric_limits<long int>::min() <<endl;
- cout<< "float,min:" << numeric_limits<float>::min() <<endl<<endl;
- cout<<"测试最大的int值上溢出之后的值"<<endl;
- int a=numeric_limits<int>::max();
- cout <<a<<endl;
- a++;
- cout <<a<<endl;
- cout<<"结果为最小的int值(负数)"<<endl<<endl;
- cout<<"测试最小的int值下溢出之后的值"<<endl;
- a=numeric_limits<int>::min();
- cout <<a<<endl;
- a--;
- cout <<a<<endl;
- cout<<"结果为最大的int值(负数)"<<endl<<endl;
- return 0;
- }
#include <limits>#include <iostream>using namespace std;int main (){cout<<"输出各类最大值"<<endl;cout<< "int,max:" << numeric_limits<int>::max() << endl;cout<< "unsigned int,max:" << numeric_limits<unsigned int>::max() <<endl; cout<< "char,max:" << (int)numeric_limits<char>::max() << endl;cout<< "unsigned char,max:" << (unsigned int)numeric_limits<unsigned char>::max() << endl;cout<< "long,max:" << numeric_limits<long int>::max() <<endl; cout<< "float,max:" << numeric_limits<float>::max() <<endl<<endl; cout<<"输出各类最小值"<<endl;cout<< "int,min:" << numeric_limits<int>::min() << endl;cout<< "unsigned int,min:" << numeric_limits<unsigned int>::min() <<endl;cout<< "char,min:" << (int)numeric_limits<char>::min() << endl;cout<< "unsigned char,min:" << (unsigned int)numeric_limits<unsigned char>::min() << endl;cout<< "long,min:" << numeric_limits<long int>::min() <<endl;cout<< "float,min:" << numeric_limits<float>::min() <<endl<<endl; cout<<"测试最大的int值上溢出之后的值"<<endl;int a=numeric_limits<int>::max();cout <<a<<endl;a++;cout <<a<<endl;cout<<"结果为最小的int值(负数)"<<endl<<endl;cout<<"测试最小的int值下溢出之后的值"<<endl;a=numeric_limits<int>::min();cout <<a<<endl;a--;cout <<a<<endl;cout<<"结果为最大的int值(负数)"<<endl<<endl;return 0;}
0 0
- 数值极值
- 数值型别的极值
- 求解极值的数值算法
- 数值极限类 大笑一般来说,数值类型的极值是一个与平台相关的特性。c++标准程序库通过template numeric_limits提供这些极值,取代传统C语言所采用的预处numeric_limits
- 离散极值
- 极值问题
- 极值问题
- 数值
- 数值
- 数值
- 数值
- 多元函数的极值及条件极值
- MATLAB求极值
- poj3737_三分求极值
- 【Tyvj】第k极值
- 三分法求极值
- 三分法求极值
- STL算法(Algorithms):极值
- 现在排名优化真的难做啊,化学锚栓这个词
- Android瀑布流,解决oom
- error LNK2019: 无法解析的外部符号 __imp___vsnprintf
- 理解快速排序和归并排序
- 如何修改mysql数据库文件的路径
- 数值极值
- scala学习(三)
- Windows 7 下使用 VS2008 编程,为了打开一个文本文件
- 文字有阴影效果
- hdu 4430
- CodeForces 446A DZY Loves Sequences
- Algorithms—三角形
- linux下 将静态链接库编译成动态链接库
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)