【问题标题】:How to subtract integers from characters in C?如何从C中的字符中减去整数?
【发布时间】:2014-07-17 12:13:31
【问题描述】:

Brian Kernighnan 在他的《用 C 编程》一书中说

根据定义,字符只是小整数,所以字符变量和 常量与算术表达式中的整数相同。

这是否意味着我们可以从 int 中减去 char 变量??

我写了一小段代码:

#include <stdio.h>

main()
{
    int a ;
    int c;
    a = 1;
    c = 1 - '0' ;
    printf("%d", c);
}

但是它给了我输出 = -47...

我做错了什么??我分配的变量的类型是否正确?

【问题讨论】:

标签: c++ c variables char int


【解决方案1】:

输出是预期的。 '0' 是一个char 值,因为您的编译器可能使用ASCII 编码,所以它的值是48。它被转换为int 并从1 中减去。这给出了值-47

所以程序做了它预期做的事情,而不是你可能希望它做的事情。至于你做错了什么,很难说。我不确定您希望该程序做什么,或者您要解决什么问题。

【讨论】:

  • 好的,这清楚地说明了为什么我得到的答案是 -47........但我仍然不确定你是否对我的问题说“是”:我可以减去 char 和整数??
  • @ArchKudo 是的,你刚刚做到了。您从 int 1 中减去了字符 '0'。然后你找回了 int -47
  • @ArchKudo char 隐式转换为int,然后用两个int 值进行减法。
【解决方案2】:

'0'-'9'' 中的字符在转换为整数时的值是 48-57('0' = 48、'1' = 49 等)。阅读有关ASCII Values 的更多信息。用于数值计算时,首先转换为int,所以1- '0' = 1-48 =-47

【讨论】:

  • 哦,这就解释了为什么我用 %c 替换它时得到了 SOH
【解决方案3】:

您在这里将实际操作表示形式混合在一起。 printf 根据指定的格式输出数据 - 在您的情况下为整数。如果要打印为字符,请将%d 切换为%c

【讨论】:

  • 但是我不是将 c 定义为 int 所以这不意味着我必须在 printf 中使用 %d 相对于整数 c 吗?
  • @Adriano 不是我说的吗? (我误会了吗??)
  • @ArchKudo 是的,你是对的。评论是针对冰袋的! :)
  • @AdrianoRepetti 这正是重点 - %d 定义了您正在打印的数据的输出格式,无论数据本身如何(从计算机的角度来看,这只是一个 0 和 1 的块,而您根据您的需要选择如何解释它)。
  • @icepack,哦,是的,它确实将 int 转换为 char,当我使用 %c 参数打印 int a = 1 时,它给了我 SOH,我不知道,谢谢... .....
【解决方案4】:

你正在做的是处理字符的 ASCII 码,每个字符都有一个 ASCII 值。

现在,稍微玩一下每个字符的 ASCII,您可以执行以下操作:

int a;
a = 'a' - 'A' ;
printf("%d", a);

得到 32 作为输出,由于 'a' = 97 和 'A' = 65 的 ASCII 值,那么你有 97-65 = 32

【讨论】:

    【解决方案5】:

    我认为这会让你更清楚地理解......

    #include <stdio.h>
    
    main()
    {
        int a ;
        a = 1;
        printf("%d", char(a+48));
    //or printf("%d", char(a+'0')); 
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2016-06-14
      • 2015-08-13
      • 2021-07-07
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      相关资源
      最近更新 更多