C语言 为什么加上符号“0”之后数字4变成了符号“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;
}
我不理解在这种情况下将数字转化为符号的过程。
解决方案
'0'
只是整数48的可读表示,它被认为是ASCII字符'0'
的代号。
ASCII数字代码:
decimal | octal | hex | binary | character |
---|---|---|---|---|
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'
的值最大)。