我写了一个程序,它打印了作为参数传递的同一个数字。代码可以工作,但我不理解将数字转换为字符的过程。这在机器级别是如何工作的?为什么,当我添加零符号时,我会从数字4得到4符号?
#include <stdio.h>
void ft_putchar(char c)
{
write(1, &c, 1);
}
void ft_putnbr(int nb)
{
if (nb >= 10)
{
ft_putnbr(nb / 10);
ft_putnbr(nb % 10);
}
else
{
ft_putchar(nb + '0');
}
}
int main()
{
ft_putnbr(42);
return 0;
}
字符串
我不明白在这种情况下将数字转换为符号的过程。
2条答案
按热度按时间m3eecexj1#
'0'
是人类可读的整数48的表示,它被认为是ASCII中字符'0'
的代码。ASCII数字代码:
| 小数|八进制|hex|二进制|字符|
| --|--|--|--|--|
| 48 | 060 | 30 | 0110000 | 0 |
| 49 | 061 | 31 | 0110001 | 1 |
| 50 | 062 | 32 | 0110010 | 2 |
| 51 | 063 | 33 | 0110011 | 3 |
| 52 | 064 | 34 | 0110100 | 4 |
| 53 | 065 | 35 | 0110101 | 5 |
| 54 | 066 | 36 | 0110110 | 6 |
| 55 | 067 | 37 | 0110111 | 7 |
| 56 | 070 | 38 | 0111000 | 8 |
| 57 | 071 | 39 | 0111001 | 9 |
当你把
4
加到48
上,这是'0'
的整数表示,你得到52
。当您将其写入屏幕时,将显示其代码所表示的字符(在本例中为
'4'
)C标准还保证数字字符代码将是连续的,并以自然的方式排序(即
'0'
最低值和'9'
最高值)atmip9wb2#
C语言保证数字0到9的字符代码必须是连续的:
10位十进制数:
0 1 2 3 4 5 6 7 8 9
⋮
在源和执行基本字符集中,上述十进制数字列表中
0
之后的每个字符的值都必须比前一个字符的值大1。这意味着
'1'
=='0' + 1
,'2'
=='1' + 1
,'3'
=='2' + 1
,等等。有了这些知识,很容易推断出
'4'
=='3' + 1
=='2' + 2
=='1' + 3
=='0' + 4
。一般来说,从0到9的任何数字的数字字符都可以通过将该数字添加到字符
'0'
来找到。