在 C 中打印声明的 char 值

2024-01-13

我知道字符变量的范围是从(有符号)-128 到 127 和(无符号)0 到 255

char x;
x = 128;

printf("%d\n", x); 

但它是如何运作的呢?为什么我得到-128 for x?


printf是一个可变参数函数,仅提供第一个参数的精确类型。
这意味着默认促销适用于以下参数,因此所有排名小于的整数int被提升为int or unsigned int,并且所有排名较小的浮点值double被提升为double.

如果您的实施有CHAR_BIT8个,简单char已签名并且您有一个强制的 2s 补码实现,因此您得到

128(字面值)到 -128(char/signed char)到-128(int)打印为int=> -128

如果满足所有列出的条件但强制 2s 补码实现,您将获得一个信号或某个实现定义的值。

否则你会得到 128 的输出,因为 128 适合char / unsigned char.

案例 2 的标准报价(感谢 Matt挖掘正确的参考 https://stackoverflow.com/questions/23691891/printing-declared-char-value-in-c/23691986#comment36404354_23692116):

6.3.1.3 有符号和无符号整数

1 当整数类型的值转换为_Bool以外的其他整数类型时,如果 该值可以用新类型表示,它没有改变。
2 否则,如果新类型是无符号的,则通过重复添加或来转换该值 比新类型可以表示的最大值减一 直到该值在新类型的范围内。60)
3 否则,新类型是有符号的,并且值不能在其中表示;要么 结果是实现定义的或引发实现定义的信号。

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

在 C 中打印声明的 char 值 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • Asp.NET WebApi 中类似文件名称的路由

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

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在

随机推荐

  • Elixir 变量真的是不可变的吗?

    在 Dave Thomas 的 Programming Elixir 一书中 他指出 Elixir 强制执行不可变数据 并接着说道 在 Elixir 中 一旦变量引用了诸如 1 2 3 之类的列表 您就知道它将始终引用相同的值 直到您重新绑
  • 如何从字符串转换为 XElement 对象

    我有一个像这样的字符串
  • STL Vector默认使用“new”和“delete”进行内存分配吗?

    我正在为应用程序开发一个插件 其中内存应该由应用程序分配并跟踪它 因此 内存句柄应该以缓冲区的形式从主机应用程序获取 然后将它们返回给应用程序 现在 我计划使用 STL Vectors 我想知道它内部使用什么样的内存分配 它在内部使用 新建
  • jquery悬停事件无法正常工作

    我有一个简单的水平菜单 当我将鼠标悬停在每个项目上时 子菜单会向下滑动 所以基本上它是我们经常看到的典型导航菜单 我希望当鼠标悬停时子菜单会在鼠标移出时向下和向上滑动 我的问题是 如果我在项目中快速移动鼠标 就会有多个子菜单保持可见 我猜这
  • RSS 是否跟踪保留或提交的内存?

    我正在 java 8 上使用不同的 jvm 选项进行实验 以降低 RSS 用于 Rss 跟踪的脚本 ps o rss o vsz o pid pid 用于设置 java 进程的 JVM 参数 XX PrintNMTStatistics XX
  • Laravel 5 中用于管理或身份验证的 Laravel 中间件

    我是 Laravel 的新手 不了解 Laravel 限制机制 我读过有关中间件的内容 但很困惑如何使用它 为什么使用它以及它如何工作 所以请指导我如何实现它以达到限制目的 即对于 auth sa 用户路由 确保您在数据库用户表中有角色列或
  • Sitecore 中子布局的多变量测试

    我过去曾尝试过这个概念 现在对在我公司的 Sitecore 网站上使用多变量测试感兴趣 我认为在很多地方我们绝对可以通过使用 A B 测试来提高销量 运行两个完全不同的模板 看看哪种布局更适合用户 在网站上运行许多不同的子布局 表单 以查看
  • PHP 中的重音符号 (`)(不是单引号)代表什么?

    在下面的示例中 第二行中的重音符号是什么意思 cmd ffmpeg i video deinterlace an ss second t 00 00 01 r 1 y vcodec mjpeg f mjpeg image 2 gt 1 re
  • 将版本放入我的 java 应用程序 - Netbeans

    有什么方法可以在 netbeans 中为我的应用程序提供版本号 然后在我的代码中访问该版本号 类似于我们在 Net 中使用的程序集号 在 java 或 netbeans 中是否有类似的东西 定义一个Implementation Versio
  • 保留 Spark Streaming 输出

    我正在从消息传递应用程序收集数据 我目前正在使用 Flume 它每天发送大约 5000 万条记录 我想用卡夫卡 使用 Spark Streaming 从 Kafka 消费 并将其保存到 hadoop 并使用 impala 进行查询 我尝试过
  • Vue.js 组件渲染后是否会触发事件?

    我在 Vue js 中有一些自定义组件 在我拥有的一个组件中有一个选择列表 我想将其呈现为Chosen http harvesthq github io chosen 选择框 我将其与 jQuery 函数一起使用 select chosen
  • 如何在 Firefox 和 Opera 中缩放 HTML 元素?

    如何在 Firefox 和 Opera 中缩放 HTML 元素 The zoom该属性在 IE Google Chrome 和 Safari 中有效 但在 Firefox 和 Opera 中无效 有什么方法可以将这个属性添加到 Firefo
  • JaxB读取类层次结构

    只是延伸使用 JaxB 解析类层次结构 https stackoverflow com questions 15676401 parsing class hierarchy using jaxb问题 想要使用 JaxB 读取以下 xml 文
  • 我需要引用命令替换吗?

    根据Google Shell 风格指南 https google github io styleguide shell xml Quoting 我应该 始终引用包含变量 命令替换 空格或 shell 元字符的字符串 除非需要小心的不带引号的
  • 是否可以让 Azure Pipeline 在提交时修改 README.md?

    我正在尝试在 Azure DevOps Repo 中自动生成和更新代码文档 我已经配置了一个管道 以便在提交到 master 分支时运行 python 脚本 该脚本从存储库中的文件中提取相关信息并创建一个 markdown 文件并将输出存储
  • 直接以 PDF 格式打印通过 JSP 动态创建的输出

    我通过 JSP 通过访问数据库动态打印报告 我正在使用Struts 框架和Java代码位于Action类中 最后通过显示输出 JSP 页面 它在屏幕上显示得很好 但在打印时却无法正常显示 我只想以 PDF 格式显示报告 而不是 JSP gt
  • 各种切入点表达式作用域意外触发多个通知调用

    背景 使用方面记录项目 例如所有标有 Log注释将信息写入日志文件 Problem 方法似乎是递归调用一级深度的 但代码没有显示任何这样的递归关系 Actual 记录结果 2018 09 25 12 17 29 155 EmailNotif
  • jquery获取光标所在元素

    我正在使用 javascript 和 jquery 为我的网站构建一个分割测试工具 现在 当光标经过预览框中的元素时 我想为每个要拆分测试的元素显示一个小悬停菜单 有可能做这样的事情吗 我尝试过这样的事情 body hover functi
  • 如何将框架添加到Swift项目中?

    我想向我的 Swift 项目添加一个库 我发现了 3 个不同的地方需要添加 我想知道执行此操作的正确方法以及每种方法的目的 常规选项卡 选择目标 gt 常规 嵌入二进制文件 链接的框架和库 构建阶段 选择目标 gt 构建阶段 嵌入框架 将二
  • 在 C 中打印声明的 char 值

    我知道字符变量的范围是从 有符号 128 到 127 和 无符号 0 到 255 char x x 128 printf d n x 但它是如何运作的呢 为什么我得到 128 for x printf是一个可变参数函数 仅提供第一个参数的精