为什么 '\97' ascii 值等于 55

2023-12-24

就像C code:

#include<stdio.h>

int main(void) {
      char c = '\97';
      printf("%d",c);
      return 0;
}

结果是55,但我不明白如何计算。 我知道八进制数或十六进制数跟在“\”后面,是吗?97是十六进制数?


\是一个八进制转义序列,但是9不是有效的八进制数字,因此不是将其解释为八进制,而是将其解释为多字符常量 a\9 and a 1其值是实现定义的。没有任何警告标志gcc默认提供以下警告:

warning: unknown escape sequence: '\9' [enabled by default]
warning: multi-character character constant [-Wmultichar]
warning: overflow in implicit constant conversion [-Woverflow]

C99标准草案中的章节6.4.4.4 字符常量段落10 says (强调我的):

整型字符常量的类型为 int。整型字符常量的值 包含映射到单字节执行字符的单个字符是 解释为整数的映射字符表示形式的数值。包含多个字符的整型字符常量的值(例如, 'ab'),或包含不映射到单字节的字符或转义序列 执行字符,是实现定义的.

例如gcc实施情况已记录在案here http://gcc.gnu.org/onlinedocs/cpp/Implementation_002ddefined-behavior.html如下:

编译器一次计算一个字符的多字符字符常量,将先前的值左移每个目标字符的位数,然后对截断为目标宽度的新字符的位模式进行或运算特点。最终的位模式给定类型为 int,因此无论是否对单个字符进行签名(与 3.1 版及更早版本的 GCC 略有不同),都会进行签名。如果常量中的字符多于目标 int 中可以容纳的字符,编译器会发出警告,并忽略多余的前导字符。

例如,具有 8 位字符的目标的 'ab' 将被解释为 '(int) ((unsigned char) 'a' * 256 + (unsigned char) 'b')',而 '\234a' 为'(int)((无符号字符)'\ 234'* 256 +(无符号字符)'a')'。

据我所知,这被解释为:

char c = ((unsigned char)'\71')*256 + '7' ;

这导致55,这与多字符常量上面的实现虽然翻译\9 to \71并不明显。

Edit

后来我意识到真正发生的事情是\正在被丢弃,所以\9 -> 9,所以我们真正拥有的是:

c = ((unsigned char)'9')*256 + '7' ;

这似乎更合理,但仍然任意,我不清楚为什么这不是一个直接的错误。

Update

来自阅读带注释的 C++ 参考手册我们发现在经典C在旧版本的 C++ 中,当反斜杠后面的字符未定义为转义序列时,它等于字符的数值。 ARM部分2.5.2:

这与经典 C 和 C++ 早期版本的解释不同,其中黑斜杠后跟源字符集中的字符的序列的值(如果未定义为转义序列)等于该字符的数值。例如 '\q' 将等于 'q'。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 '\97' ascii 值等于 55 的相关文章

  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 华氏度到摄氏度的转换仅产生 0.0 和 -0.0

    我正在阅读 Java 方法书的第 8 章 方法 构造函数和字段 但我的一个练习遇到了问题 提供的代码是Temperature java import java awt import java awt event import javax s
  • closeAllDocumentsWithDelegate 的正确参数

    我正在编写一个应用程序 需要在一个窗口中包含多个文档 正如所询问的那样here https stackoverflow com questions 1116886 multiple documents in a single window
  • eBay API - 检查Finding API调用计数?

    感谢该页面 https go developer ebay com api call limits https go developer ebay com api call limits我们知道 eBay 允许每个 eBay 开发者帐户每天
  • 如何编写涉及间接继承的Checkstyle自定义检查?

    我们需要编写一个 checkstyle 自定义检查来验证直接或间接继承自某个类 A 的类的特定条件 是否可以使用 checkstyle API 来识别间接继承 例如 假设我们有 C类 扩展 gt B类 B类 扩展 gt A类 在这种情况下
  • 指向结构成员的指针[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 手机是否仅使用 GPS 来获取其位置?

    我正在进行测试 我们正在比较 Android 手机和 GPS 设备的 GPS 位置 我们希望将其集成到我们的硬件中 但为了使测试准确 手机只需要使用 GPS 而不是手机信号塔和 WiFi 这是代码 我在其中设置手机使用哪种服务 Locati
  • 仅当调试器运行时防伪令牌异常

    我有一个 mvc2 应用程序 它通过 iframe 提供内容 iframed 页面只是一个表单 它有一个请求验证令牌 在开发人员使用 Visual Studio 2005 调试器之前 一切都可以跨域正常运行 一旦他们这样做 我就会收到以下错
  • 如何在本地安装 Haskell Stack?

    我正在学校服务器上工作 我需要安装 Haskell 的堆栈 在里面README https github com commercialhaskell stack blob master README md文件并在website https
  • iOS 应用程序开发建议。应用程序进入后台

    我正在享受 swift 的乐趣 并且正在尝试制作一个简单的游戏 我得到了一些在游戏过程中发生变化的变量 如果出现以下情况 保存这些变量的最佳实践是什么applicationDidEnterBackground对于所有其他功能appDeleg
  • 将矩阵并排放置以创建另一个矩阵

    我有一个由 12 个矩阵组成的数组 由以下代码给出 ma array sample 0 127 3 4 6 replace TRUE c 3 4 12 让他们被命名为A B C L 我想创建一个矩阵 其中上面的矩阵以 4 行 3 列的模式排
  • 应用程序被最近任务杀死后如何重新启动服务

    我创建了一项服务来定期获取设备的当前位置 我希望该服务在后台运行 即使该应用程序已从最近打开的应用程序中清除 目前 该服务仅在后台运行 直到应用程序出现在最近打开的应用程序中 但当应用程序被刷掉 或以其他方式终止 时 该服务会立即停止 我已
  • Numpy sum keepdims 错误

    Python 在矩阵上调用 numpy sum 函数时会抛出错误 probs exp scores np sum exp scores axis 1 keepdims True 错误 probs exp scores np sum exp
  • 奇怪的javascript变量重新赋值问题

    我有一个变量叫做data 它将数组带入函数 然后我决定继续仅使用数组的第一个元素 data 0 如果我执行以下任一操作 会有什么不同吗 重用 替换数组变量名data通过为其分配第一个元素 这将是 data data 0 并继续使用data
  • 如何禁用从移动浏览器上传文件的相机选项?

    我正在使用文件类型输入 它应该接受 pdf doc 和 docx 文件格式 所以我添加了以下输入标签
  • ViewCompat.setOnApplyWindowInsetsListener() 更改系统导航栏的背景

    应用程序通常有这样的导航栏 但是当我添加ViewCompat setOnApplyWindowInsetsListener ViewCompat setOnApplyWindowInsetsListener window decorView
  • 用户访问通讯录时崩溃报告

    在我的应用程序中 Crashlytics 用于收集用户的崩溃报告 这是来自用户的一份崩溃报告 这可能取决于用户的联系信息 我无法重现崩溃 因为我不知道他 她的联系人中有什么 有人对这种情况有想法吗 com apple root defaul
  • MongoDB:如何将嵌套数组分组到一个文档中?

    我有以下收藏 id 23423 dsfsdf 32423 name Proj1 services id sdfs 24423 sdf name P1 Service1 products id sdfs 24jhh sdf name P1 S
  • dart中的完整路径和相对路径有什么区别

    我开发了一个 flutter 应用程序 在 model 包中定义了多个模型 然后我声明一个类Example例如 在 模型 中 模型 示例 dart class Example override String toString return
  • C# 如何在控制台应用程序中制作水平条形图

    我需要制作一个水平条形图来表示直方图字典中数字的出现情况 我尝试过使用 Console BackgroundColor 但是 这显然只会使线条背景色变成蓝色 static void Main string args string Speac
  • 为什么 '\97' ascii 值等于 55

    就像C code include