【问题标题】:In C how does a character work在 C 中,字符如何工作
【发布时间】:2016-07-12 23:56:43
【问题描述】:

在我下面给出的程序中,我们将j 作为一个字符。 我们取j=1 但ascii 值1 是49。那么为什么答案是15? j 是整数吗?

#include<stdio.h>

int main()
{
    int i=0;
    char j;

    for(j=1 ; j <=5 ; j++)
    {
        printf("-%c\n",j);
        i=i+j;
        printf("%c\n",i);
    }

    printf("%d",i);

    return 0;
}

【问题讨论】:

  • 在 C 中,char 是一个 1 字节长(8 位)的数字变量。 unsigned char 的可能值为 0 到 255,signed char -127 到 +127。 char a = 1 的值等于 1 而不是 '1'

标签: c char ascii


【解决方案1】:

在循环中计算数字 1、2、3、4、5 的总和确实等于 15。

在这个表达式中

i=i+j;

由于整数提升,操作数j 转换为int 类型,int 类型的结果存储在变量i 中。

在此声明中

printf("%d",i);

这个结果作为一个整数值被输出。

如果你想处理字符值 '1'、'2' 等等,你可以写这样的循环

for ( j = '1' ; j <= '5' ; j++ )

如果使用 ASCII 编码,则变量 i 将包含值 49、50、51、52、53 的总和。

【讨论】:

  • 但是 J 是如何转换成 int 的呢? .为什么计算机没有将 j=1 的值计算为 49 ? ?
  • @ShahirRahman 如果你写 j = '1';那么 j 确实会在使用 ASCII 编码时存储为值 49。但是,您明确地为它分配了值 1 而不是 '1'。
  • @ShahirRahman 你可以写这样的循环 for(j='1' ; j
  • :D ...现在我明白了!非常感谢
【解决方案2】:
int i=0;

i 声明为int

char j;

j 声明为char

for(j=1 ; j <=5 ; j++)

用整数初始化j,用1的ASCII值初始化它,你可以使用49

for(j='1' ; j <= '1' + 5 ; j++)

但我不明白您的最终目标是什么,以及这对您有何帮助?

    printf("%c\n",i);

正在输出char;尽管iint

printf("%d",i);

正在输出int

现在的区别是第一个在第三次迭代时会超过 0-127 的 ASCII 范围,所以我建议你将其更改为后一种形式(%d)。

【讨论】:

  • 我现在有点清楚了。不过我有点困惑。好吧,我怀疑如果我运行这段代码,输出是 15 。 bt 我在想为什么它不计算 49+50+51 ......就像这样,因为 J 是这里的一个字符!而 J=1 的 ascii 值对计算机来说是 49 !!
猜你喜欢
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 2016-12-12
  • 1970-01-01
  • 2021-03-11
相关资源
最近更新 更多