我是C编程的初学者,我正在编写一个简单的程序来加密一个字符串到rot13 Ceaser cipher。现在,我知道在C中插入浮点数和整数但我真的不知道下面发生了什么字符:
我这样做char test = 'A' + 13;
我得到N
作为输出。精细!!但怎么样? “下面发生了什么?我的猜测是'A'被转换为整数,两者都被添加,然后最终答案再次被转换为char。
为什么会这样?
答案 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
答案 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; }