1. 什么是数制?
在计算机科学中,数制是一个数字表示法的系统,可以用来表示数值和表达算术和计算的操作。不同的数制使用不同的字符、符号和位值来表示数字。常见的数制包括二进制、十进制、八进制和十六进制。
二进制:二进制是计算机系统所使用的数制,它由两个数字0和1组成。在计算机内部,所有的数字都是以二进制形式存储和处理的。
十进制:十进制是我们使用的常见数字系统,它由0~9十个数字组成。使用十进制数表示时,每一位所代表的数值是原来数值的10的幂。
八进制:八进制是一种基数为8的数字系统,它由0~7八个数字组成。使用八进制数表示时,每一位所代表的数值是原来数值的8的幂。
十六进制:十六进制是一种基数为16的数字系统,它由0~9和A~F十六个数字组成。使用十六进制数表示时,每一位所代表的数值是原来数值的16的幂。
2. C语言中常用的数制
C语言中常用的数制是十进制和十六进制,但C语言也支持八进制和二进制数的表示。
2.1 十进制数
C语言中的整型常量默认使用十进制数表示,例如:
int a = 10; //十进制数
2.2 八进制数
C语言中使用数字0开头表示一个八进制数,例如:
int a = 012; //八进制数,等同于十进制的10
需要注意的是,在C语言中,八进制数中只能使用数字0~7,不能使用8或9。
2.3 十六进制数
C语言中使用数字0x或0X开头表示一个十六进制数,例如:
int a = 0x10; //十六进制数,等同于十进制的16
十六进制数中可以使用数字0~9和字母A~F(大小写均可),代表10~15这6个数字。
3. C语言中不能表示的数制
虽然C语言中支持使用二进制、八进制、十进制和十六进制四种数制表示数字,但是还存在一些无法直接表示的数值。
3.1 无理数
无理数是指不能表示为两个整数之比的实数,例如π(圆周率)和e(自然对数的底数)等数值。这些数值在C语言中都不能直接表示,需要使用数学库函数来近似计算。
3.2 超出整型表示范围的数值
C语言中的整型变量使用有限的二进制位数表示数值,因此存在一个最小值和最大值。超出这个范围的数值无法用整型变量来表示,例如:
int a = 2147483647; //int类型的最大值
int b = a + 1; //b的值是多少?
在这个例子中,a的值已经达到int类型能够表示的最大值,再加1就会超出这个范围,导致结果不确定。
如果需要表示超出整型范围的大数值,可以使用长整型(long)或者浮点型(float、double)变量来存储。
3.3 非数字(NaN)
非数字是一种特殊的数值,它表示无法表示为有限数字的结果,例如0/0、∞/∞等表达式。在C语言中,非数字的表示方法是使用float、double、long double类型的常量NAN。
#include <stdio.h>
#include <math.h>
int main() {
double a = 0.0;
double b = 0.0;
double result;
result = a / b;
if(isnan(result)) {
printf("结果为非数字。\n");
}
return 0;
}
在这个例子中,我们计算a/b的结果,由于b的值为0,因此结果无法表示为有限数字,而是一个非数字。
4. 总结
本文介绍了计算机科学中常见的数制和C语言中常用的数制。虽然C语言支持二进制、八进制、十进制和十六进制四种数制表示数字,但仍有一些数值无法直接表示,例如无理数和超出整型范围的数值。对于这些数值,需要使用数学库函数或者特殊的常量来近似计算或者表示。