【问题标题】:Add an integer to a char in C将整数添加到C中的char
【发布时间】:2016-11-23 20:43:52
【问题描述】:

我正在从 K&R 书中学习 C,我在网上找到了针对书中任务的建议解决方案。任务和建议的答案可以在这里找到(该页面上的最后一个解决方案) http://clc-wiki.net/wiki/K%26R2_solutions:Chapter_1:Exercise_13

哪里有这行代码:

putchar('\260' + (MIN(wl[j]-i, 2)));

例如,如果函数 MIN 返回 2,我们将其添加到 '\260'

putchar('\260' + 2);

这种将 int 添加到 char 的方法是什么?这个 '\260' 值是什么?

【问题讨论】:

  • 使用另一本书——那本书已经过时了。
  • 为什么会有人阅读 K&R? c11、c++14 等等,但不是 K&R!
  • @KevinDTimm 有什么建议吗?,@iolo 这是我注册的学术机构交给我们的书。

标签: c kernighan-and-ritchie putchar


【解决方案1】:

'\260'是八进制数260表示的字符,十进制为176

putchar('\260' + 2); 的使用依赖于由整数值 178 表示的非 ASCII 字符的图形表示。

【讨论】:

  • 有趣的是int i = '\260' 会将 rhs 常量视为 char 并通过对其进行符号扩展来生成 i= -80(当然在 signed char 平台上......)ideone.com/YdV6Dz跨度>
  • @EugeneSh.:正确的结论,错误的推理。字符常量的类型为int。 0 .. CHAR_MAX 范围之外的字符常量值的符号由 char 类型的符号确定。 N15706.4.4.4p10.
  • @KeithThompson 谢谢。它说它是实现定义的。 "..包含不映射到单字节执行字符的字符或转义序列,是实现定义的。"
  • 该网站显示了程序假定输出的图像。我不知道作者使用的是什么字符集——显然其中 0xb0、0xb1 和 0xb2 适合在直方图中使用,但在 Unicode 和 Windows-1252 中,这些字符是度数符号、加号-减号, 和 SUPERSCRIPT 两个。
  • @EugeneSh.: 啊,但在上一段中它说八进制或十六进制转义序列被限制在unsigned char 的范围内。但是将176unsigned char 转换为char 的结果(对于CHAR_BIT==8, plain char` 签名)是实现定义的。伊克。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 2016-03-07
  • 2011-04-06
相关资源
最近更新 更多