困惑C字符铸造与字符

时间:2014-07-13 10:59:30

标签: c casting

我是C编程的初学者,我正在编写一个简单的程序来加密一个字符串到rot13 Ceaser cipher。现在,我知道在C中插入浮点数和整数但我真的不知道下面发生了什么字符:

我这样做char test = 'A' + 13;

我得到N作为输出。精细!!但怎么样? “下面发生了什么?我的猜测是'A'被转换为整数,两者都被添加,然后最终答案再次被转换为char。 为什么会这样?

4 个答案:

答案 0 :(得分:4)

在C中,char等类型是数字,'A'是编写int值65的迂回方式(前提是您的字符集是ASCII,就是这种情况)所有现代平台)。因此,表达式'A' + 13等同于65 + 13,其结果将转换为char,即赋值运算符左侧的类型。

换句话说,'A'不是int,而是int总和65和13会被转换为char

答案 1 :(得分:1)

C将字符视为小整数。例如,在ASCII中,字符“a”的值为97,字符“A”的值为65。

当字符出现在源代码中时,C只使用其整数值。

char ch = 65; // ch is 'A' now
ch = ch + 2   // ch is 'C' now

char ch = 'A'; // ch has value 65 now
ch = ch + 2    // ch is 'C' now

ASCII TABLE

答案 2 :(得分:0)

  

test = 65(ASCII对应于A)+ 13 = 78 = N(已转换为字符)

字符在integers内被解释为C ..所以发生这种情况

答案 3 :(得分:-1)

每个字母都有其数字表示。 ASCII字符集(不包括IBM定义的扩展字符)分为四组,每组32个字符。前32个字符,ASCII代码0到1Fh(31),形成一组特殊的非打印字符,称为控制字符。我们将它们称为控制字符,因为它们执行各种打印机/显示控制操作而不是显示符号。示例包括将光标定位到当前字符行左侧的回车符,换行符(将光标向下移动输出设备上的一行)和后退空间(将光标向后移动一个位置) 。不幸的是,不同的控制字符在不同的输出设备上执输出设备之间的标准化很少。要确切了解控制字符如何影响特定设备,您需要查阅其手册。 第二组32个ASCII字符代码包括各种标点符号,特殊字符和数字。该组中最值得注意的字符包括空格字符(ASCII码20h)和数字(ASCII码30h..39h)。请注意,数字数字仅与H.O.中的数字值不同。蚕食。通过从任何特定数字的ASCII码中减去30h,您可以获得该数字的等效数字。 第三组32个ASCII字符保留用于大写字母字符。字符的ASCII码" A" .." Z"位于41h..5Ah(65..90)范围内。由于只有26个不同的字母字符,其余的6个代码包含各种特殊符号。 第四组也是最后一组32个ASCII字符代码保留用于小写字母符号,五个附加特殊符号和另一个控制字符(删除)。请注意,小写字符符号使用ASCII代码61h..7Ah。如果将大写和小写字符的代码转换为二进制,您会注意到大写符号与正好位于一位的小写字母不同。 你不要混淆'和"这封信是'作为' a'表示1个字符,它在计算机内存中的表示为97,并加1 我们得到98是b 考虑以下示例     #包括     int main()     {     char ch =' a&#39 ;;     //数字重复表达     printf("%c =%d \ n",ch,ch);     ch = ch 15;     // c 15的数字再存储     printf("%c%d \ n",ch,ch);     返回0;     }