提问人:user22869055 提问时间:11/7/2023 最后编辑:Jonathan Leffleruser22869055 更新时间:11/7/2023 访问量:144
数字只是数字吗?
Are digits only numbers?
答:
数字只是数字吗?
不。
"INF"
,可解析为浮点值。"NaN"
"0xABC"
可以解析为整数。这里,是一个数字,一个十六进制数字。'A'
数字,如 、 、 ....可以解析为字符串,而不仅仅是数字。"0"
"12345"
单个十进制数字字符具有读取和解释它们的各种可能性。'0'
'9'
评论
INF
NaN
0
1
2
3
4
5
6
7
8
9
+
,
.
嗯,“1”是一个数字,也是一个数字。“12”不是一个数字,而是一个数字。
数字由数字和附加字符组成,例如小数点,或符号(加/减),或小数点分隔符,后期使用只是为了使大数字更具可读性。
数字正是可用于书写数字的数字字符集,即如果您谈论的是以 10 为基数的集合;十进制数字集加上十六进制数字(如果您谈论的是十六进制数字);如果你在谈论二进制数等,则为集合。其他字符(小数点、千位分隔符、负号、运算符、标点符号、方括号/括号等)都不是数字。{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
{A, B, C, D, E, F}
{0, 1}
另一种看待它的方法是,数字正是可用于指示任何基数中数字中单个位置值的字符。
简单回答
表面的答案是Bob___提到的,用于确定 C 编程语言是否将字符计为数字的函数。这对于绝大多数用途来说已经足够了。isdigit()
更复杂的答案
更复杂的是,当人们问一个更基本的问题时,“什么是角色”?
如今,我们非常习惯于 1 字节的数据表示 ASCII 字符表中的字符,但在 C 语言中,不确定情况是否如此。当C语言刚被创建时,有许多相互竞争的字符表,例如IBM的EBCDIC。如今,UTF 有各种风格,UTF8 与 ASCII 表中的 127 个字符二进制兼容。
无论如何,所有这些字节值实际上所做的就是告诉一些图形引擎/终端显示器或电传打印机选择什么字符字形或高尔夫球位置来绘制/锤击到页面上。特定字节值是否为数字仅由人们假设的字符表定义,该字符表首先适用于数据。
因此,如果您从源自使用 EBCDIC 的古老 IBM 大型机的文件中读取一个字节,那么现代 Linux C 编译器的版本将为您提供错误的答案,因为它期望输入是针对 ASCII 字符集的。同样,如果你将你的 Linux 连接到一个期望获得 EBCDIC 字符的终端,你最终会得到一个非常混乱的显示。同样,如果您将 UTF-16 数据流馈送到无法理解它的终端显示器,也是如此。isdigit()
而且,这是在人们开始考虑数字有多少种不同符号之前。大多数人对数字的期望是字符 0,1,2,3,4,5,6,7,8,9。更丰富的表示法会输入 +、- 和 。或 ,表示小数位。科学记数法可能会输入“e”或“E”。如果是 base16,则输入 A、B、C、D、E、F 是司空见惯的。
因此,对“数字字符”的含义有许多不同的可能解释。
[顺便说一句,我最近读到艾伦·图灵(Alan Turing)擅长以17为基数的心算——这与当天的密码破译有关。有人知道他们是如何记下 17 基数的吗?我有一种感觉,十六进制的 A-F 非常现代]。
这只是一种冗长的说法,由您来选择您想要遵循的惯例。使用标准库函数 like 意味着使用编译器/库开发人员选择采用的约定进行操作,这是一种能够简短地向其他人解释您遵循的约定的好方法,并且很容易与其他代码互操作。您可能希望选择其他易于理解的约定(例如 0..9,A..F 表示十六进制)。或者,如果你真的想,发明你自己的!isdigit(), printf(), atoi(), atof()
根据我的研究,数字是一个数字字符。但我不确定它是否也可以是一个问号,一个昏迷,甚至一个点。
根据 C 2018 5.2.1 3,10 位十进制数字是 、 、 、 、 和 (仅此而已)。0
1
2
3
4
5
6
7
8
9
根据 C 2018 6.4.2.1 1,C 语法中的数字标记是 、 、 、 、 或之一(不是其他任何内容)。0
1
2
3
4
5
6
7
8
9
根据 C 2018 7.4.1.4 2,该函数测试 5.2.1 中定义的任何十进制数字字符。isdigit
在某些情况下,我们可能会接受其他字符作为数字。十六进制数字包括 、 、 、 、 和小写版本。但是像这样的扩展应该明确说明或从上下文中清楚说明。普通的十进制数字只是通过 的十个字符之一。A
B
C
D
E
F
0
9
补充
数字只是数字吗?
当我们谈论数字、字符串和数字时,我发现区分数字和数字很有帮助:
- 数字是一个数学实体。17、2/3、π 和 -1 是数字。虚数和复数,例如 3+4i,通常被认为是数字。∞,无穷大可以被认为是一个数字。(抽象数学可能把其他实体当作数字。“十七”、“17”、“11 16”和“1.7•10 1”是同一数字的不同名称。
- 数字是表示数字的一串字符(也可能是其他形式的书写)。“123”是一串数字字符,代表数字一百二十三。 也是 123 的数字,也是 .
0x7B
12.3e1
鉴于此,十进制数字不是数字。它是一个字符,它可以单独使用,也可以与其他数字一起使用。它也可以是带有其他字符的数字的一部分,例如 in 。.
3.4
评论