数值型别的极值

旧城等待, 2022-02-01 01:19 287阅读 0赞

1.引言

  1. 在阅读别人的代码的时候,经常遇到最大的int值赋值为0x7FFFFFFF,最小的int值赋值为0x80000000
  2. 最大值易于理解,但是最小值为什么是0x80000000
  3. 首先注意,当给变量按16进制赋值的时候,是按补码形式赋值的。但是有一个特例就是0x80000000,这个是最小的负数,因为负数比正数表示的范围多1,所以0x80000000是没有原码的。
  4. 看下面一段测试程序:
  5. int main ()
  6. {
  7. int a=0x7FFFFFFF;
  8. int b=0x80000000;
  9. int c=0x80000007;
  10. int d=0xFFFFFFF9;//0xffffffff(-1)-0x6
  11. cout << "最大的正数:" << a << endl;
  12. cout << "最小的负数:" << b << endl;
  13. cout << "-7原码:" << c << endl;
  14. cout << "-7补码:" << d << endl;
  15. return 0;
  16. }

20130603163517265

2.

  1. 一般来说,数值型别的极值是一个与平台相关的特性。C++标准程序库通过template numeric\_limits提供这些机制,取代传统的C语言所彩专用的预处理器常数。但是C语言版本仍然可用,其中正数常数定义于<limits.h>,浮点型常数定义于<float.h>。而在C++中所有型别机制都定义于<limits>。
  2. 下面给出一个测试程序:
  3. #include <limits>
  4. #include <iostream>
  5. using namespace std;
  6. int main ()
  7. {
  8. cout<<"输出各类最大值"<<endl;
  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. cout<<"输出各类最小值"<<endl;
  16. cout<< "int,min:" << numeric_limits<int>::min() << endl;
  17. cout<< "unsigned int,min:" << numeric_limits<unsigned int>::min() <<endl;
  18. cout<< "char,min:" << (int)numeric_limits<char>::min() << endl;
  19. cout<< "unsigned char,min:" << (unsigned int)numeric_limits<unsigned char>::min() << endl;
  20. cout<< "long,min:" << numeric_limits<long int>::min() <<endl;
  21. cout<< "float,min:" << numeric_limits<float>::min() <<endl<<endl;
  22. cout<<"测试最大的int值上溢出之后的值"<<endl;
  23. int a=numeric_limits<int>::max();
  24. cout <<a<<endl;
  25. a++;
  26. cout <<a<<endl;
  27. cout<<"结果为最小的int值(负数)"<<endl<<endl;
  28. cout<<"测试最小的int值下溢出之后的值"<<endl;
  29. a=numeric_limits<int>::min();
  30. cout <<a<<endl;
  31. a--;
  32. cout <<a<<endl;
  33. cout<<"结果为最大的int值(负数)"<<endl<<endl;
  34. return 0;
  35. }

20130603163656656

发表评论

表情:
评论列表 (有 0 条评论,287人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL数据类型 -- 数值

    在MySQL关系型数据库中,MySQL支持的数据类型非常丰富。它主要分为3大类,即:数值型,日期时间性,字符型。而实际上这三类数据类型可以进一步的细分扩展,可以根据业务需要选择