数值限制------c++程序设计原理与实践(进阶篇)

每种c++的实现都在<limits>、<climits>、<limits.h>和<float.h>中指明了内置类型的属性,因此程序员可以利用这些属性来检查数值限制、设置哨兵机制等等。它们对于开发底层程序是非常重要的。如果你觉得需要这些属性值,表明你的工作很可能比较靠近硬件。但这些属性还有其他用途,例如,对语言实现细节感到好奇是很正常的:“一个int有多大?”,“char是有符号的吗?”等等。希望从系统文档中找到这些问题的正确答案是很困难的,而c++标准对这类问题大多没有明确规定。较好的方法是写一个简短的小程序来获得这些问题的答案:

#include<limits>

cout<<"number of bytes in an int:"<<sizeof(int)<<‘\n‘;
cout<<"largest int:"<<INT_MAX<<‘\n‘;
cout<<"smallest int value:"<<numeric_limits<int>::min()<<‘\n‘;

if(numeric_limits<char>::is_signed)
	cout<<"char is signed\n";
else
	cout<<"char is unsigned\n";

char ch=numeric_limits<char>::min();
cout<<"the char with the smallest positive value:"<<ch<<‘\n‘;
cout<<"the int value of the char with the smallest positive value:"<<int(ch)<<‘\n‘;

  如果你编写的程序将来要用在多种硬件平台上,那么能在程序中获取上面这些信息就非常有价值了。另一种方法是将这些信息硬编码到程序中,但这对维护人员来说是灾难性的。

这些属性值对溢出检测也是很有用的。

c++程序设计原理与实践(进阶篇)

时间: 2024-11-05 22:43:09

数值限制------c++程序设计原理与实践(进阶篇)的相关文章

有符号数和无符号数------c++程序设计原理与实践(进阶篇)

有符号数与无符号数的程序设计原则: 当需要表示数值时,使用有符号数(如 int). 当需要表示位集合时,使用无符号数(如unsigned int). 有符号数和无符号数混合运算有可能会带来灾难性的后果.例如: vector<int> v; for(int i=0;i<v.size();++i)cout<<v[i]<<'\n'; 易实现版本: unsigned char max=160; //非常大 for(signed char i=0;i<max;i++)

编码原则实例------c++程序设计原理与实践(进阶篇)

编码原则: 一般原则 预处理原则 命名和布局原则 类原则 函数和表达式原则 硬实时原则 关键系统原则 (硬实时原则.关键系统原则仅用于硬实时和关键系统程序设计) (严格原则都用一个大写字母R及其编号标识,而推荐原则都用小写字母r及其编号标识,对于前者程序员必须严格遵守,而后者则偶尔可以不遵守) 1.一般原则 R100:任何函数和类的代码规模都不应超过200行(不包括注释). 原因:长的函数和类会更复杂,因而难以理解和测试. r101:任何函数和类都应该能完全显示在一屏上,并完成单一的逻辑功能.

bitest(位集合)------c++程序设计原理与实践(进阶篇)

标准库模板类bitset是在<bitset>中定义的,它用于描述和处理二进制位集合.每个bitset的大小是固定的,在创建时指定: bitset<4> flags; bitset<128> dword_bits; bitset<12345> lots; 默认情况下,bitset被初始化为全0,但通常我们都会给它一个初始值,可以是一个无符号的整数或者"0"和"1"组成的字符串.例如: bitset<4> fl

实现求解线性方程(矩阵、高斯消去法)------c++程序设计原理与实践(进阶篇)

步骤: 其中A是一个n*n的系数方阵 向量x和b分别是未知数和常量向量: 这个系统可能有0个.1个或者无穷多个解,这取决于系数矩阵A和向量b.求解线性系统的方法有很多,这里使用一种经典的方法--高斯消去法(https://zh.wikipedia.org/wiki/高斯消去法).首先,我们对A和b进行交换,使得A变为一个上三角矩阵.上三角矩阵就是对角线之下的所有元素均为0.即如下形式: 实现这个目标是很容易的.为了使a(i,j)变为0,我们先将它乘以一个常量,使它等于第j列上的另一个元素,比如说

(c++11)随机数------c++程序设计原理与实践(进阶篇)

随机数既是一个实用工具,也是一个数学问题,它高度复杂,这与它在现实世界中的重要性是相匹配的.在此我们只讨论随机数哦最基本的内容,这些内容可用于简单的测试和仿真.在<random>中,标准库提供了复杂的方法来产生适应不同数学分布的随机数.这一随机数标准库基于下面两个基础概念: 发生器(engine,随机数发生器):发生器是一个可以产生均匀分布整形值序列的函数对象. 分布(distribution):分布是一个函数对象,给定一个发生器产生的序列作为输入,分布可以按照相应数学公式产生一个值的序列.

动态内存分配存在的问题(内存空洞)------c++程序设计原理与实践(进阶篇)

new的问题究竟在哪里呢?实际上问题出在new和delete的结合使用上.考察下面程序中内存分配和释放过程: while(1){ Big* p=new big; //...... Small* n1=new Small; //...... delete p; Small* n2=new Small; //...... } 在每个循环步中,我们创建了两个Small,在此期间,我们还分配了一个Big,然后又释放了它.考察这段代码,每执行一个循环步,我们可能期望"消耗" 2*sizeof(S

《C++程序设计原理与实践》读书笔记(一)

程序设计是这样一门艺术,它将问题求解方案描述成计算机可以执行的形式.程序设计中很多工作都花费在求解方案以及对其求精上.通常,只须在真正编写程序求解一个问题的过程中才会对问题本身理解透彻.   为什么学习C++这门程序设计语言呢?学习程序设计不可能不借助一门程序设计语言,而C++直接支持现实世界中的软件所使用的那些关键概念和技术.C++是使用最为广泛的程序设计语言之一,其应用领域几乎没有局限.从大洋深处到火星表面,到处都能发现C++程序的身影.C++是由一个开放的国际标准组织全面考量.精心设计的.

《C++程序设计原理与实践》读书笔记(三)

一个显示模型 一种图形及图形用户界面直接对应屏幕显示的思想.其基本概念先天就是图形化的(而且都是二维的,适应计算机屏幕的矩形区域),这些基本概念包括坐标.线.矩形和圆等.从编程的角度看,其目的是建立内存中的对象和屏幕图像的直接对应关系. 其基本模型如下:我们利用图形系统提供的基本对象(如线)组合出更复杂的对象:然后将这些对象添加到一个表示物理屏幕的窗口对象中:最后,用一个程序将我们添加到窗口上的对象显示在屏幕上,我们可以将这个程序看做屏幕显示本身,或者是一个"显示引擎",或者是&quo

C++程序设计原理与实践 第十九章部分答案

1 #include <iostream> 2 #include <vector> 3 #include <string> 4 using namespace std; 5 6 template<class T> void f(vector<T>&v1,vector<T>&v2) //v2不设为const因为可能v2=v1 习题1 7 { 8 if(v1.capacity()<=v2.size()) 9 { 10