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

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'的值最大)。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程