C++ 使用变量时应注意其取值范围

  众所周知,变量是有取值范围的。像int、double、float、char等等,都有其相应的取值范围。平时在使用int型变量的时候,往往由于其用于小型的for循环,没有超出取值范围,因此忽视它的取值范围。但是,了解其取值范围是至关重要的。

  比如下面这段代码。输入一个int型变量并输出它。假如输入的数在int取值范围内,运行是没有问题的,但假如输入的数超出了int型变量的取值范围,那么就会导致程序崩溃。当然,由于这段代码用于举例子,所以简单异常,容易注意int的取值范围,但是假如代码需求是将输入的int型变量的每一位做+1处理然后输出,或者是求输入的int型变量的各位之和,或许就会忽略了int型变量的取值范围导致崩溃。

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	//for (n = 0; n < 100; n++);
	cout << n;
	system("pause");
	return 0;
}

  然而,int型变量的取值范围并没有想象中那么大,当输入一个十位的十进制数时,系统就濒临崩溃了;那么,如果要实现“将输入的数字每一位相加”功能,又要保证用户输入的数没有超过int型变量的取值范围,或者是超过了取值范围也没事,该怎么做呢?我们可以用char[]、string等字符串来代替数字。因为当输入为字符串时,取值范围的关键就不再是这个数有多大了,而是这个数的位数有没有超过字符串位数的取值范围,这样,可输入的数值就比int型变量大得多了。

 然后当要使用此数的某一位时,将那一位的字符取出,然后用其减去字符‘0’即可得到该值。

  我们都知道,在ASCII码表中,‘0’-‘9’是有其对应的ASCII值的。

  所以,当我们要将单位的int i 转化成char c 时,只需让c =‘0’+ i 即可,因为其表示c为‘0’的ASCII码值+i,正好对应了 i 转换为字符时的ASCII码值。

  而数值 i 的字符 c 要从字符 转化成int时,则是让i = c -‘0’,其意义为数值 i 的字符 c 对应的ASCII值与‘0’的ASCII码值相差的数值正好是 i 的值。

猜你喜欢

转载自blog.csdn.net/a120k96/article/details/80983099