C语言 为什么数字4加上符号“0”后变成了符号“4”?

whitzsjs  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(233)

我写了一个程序,它打印了作为参数传递的同一个数字。代码可以工作,但我不理解将数字转换为字符的过程。这在机器级别是如何工作的?为什么,当我添加零符号时,我会从数字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;
}

字符串
我不明白在这种情况下将数字转换为符号的过程。

m3eecexj

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'最高值)

atmip9wb

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'来找到。

相关问题