无符号字符的格式说明符

2024-04-13

说我要打印unsigned char:

unsigned char x = 12;

哪个是对的。这:

printf("%d",x);

or this:

printf("%u",x);

?

事情在其他地方,所以我遇到了这样的讨论:

- 即使 ch 更改为 unsigned char,代码的行为也不是由 C 标准定义的。这是因为 unsigned char 被提升为 int(在正常的 C 实现中),因此 int 被传递给 printf 作为说明符 %u。但是,%u 需要一个无符号整型,因此类型不匹配,并且 C 标准没有定义该行为

-你的评论不正确。 C11 标准规定转换说明符必须与函数参数本身具有相同的类型,而不是提升的类型。这一点在 hh 长度修饰符的描述中也得到了具体解决:“参数将根据整数提升进行提升,但在打印之前其值应转换为有符号字符或无符号字符”

那么哪个是正确的呢?关于此事有可靠消息来源吗? (从这个意义上说,我们还应该打印unsigned shortint 与 %d 因为它可以提升为int?).


正确的是*:

printf("%d",x);

这是因为默认参数促销 as printf()是可变参数函数。这意味着unsigned char价值总是被提升为int.

来自 N1570(C11 草案)6.5.2.2/6 函数调用(强调我的未来):

如果表示被调用函数的表达式的类型为 不包括原型,整数促销执行于 每个参数以及具有类型的参数float被提升为double。这些被称为默认参数促销.

and 6.5.2.2/7子条款告诉:

函数原型声明符中的省略号表示法导致 参数类型转换在最后一个声明的参数之后停止。 这默认参数提升是在尾随参数上执行的.

这些整数提升定义在6.3.1.1/2 布尔值、字符和整数:

If an int can represent all values of the original type (as restricted by the width, for a bit-field), the value is converted to an int; otherwise, it is converted to an unsigned int. These are called the integer promotions.58) All other types are unchanged by the integer promotions.

这句话回答了你的第二个问题unsigned short(见下面的评论)。


* with exception to more than 8 bits unsigned char (e.g. it might occupy 16 bit), see @chux's answer https://stackoverflow.com/a/27552302/586873.

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

无符号字符的格式说明符 的相关文章

  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?

    我试图在按下按键的简单动作中找到这些数字及其含义的任何逻辑解释 GetAsyncKeyState VK SHIFT 0x8000 可以使用哪些其他值来代替0x8000它们与按键有什么关系 GetAsyncKeyState 根据文档返回 如果
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 检测到严重错误 c0000374 - C++ dll 将已分配内存的指针返回到 C#

    我有一个 c dll 它为我的主 c 应用程序提供一些功能 在这里 我尝试读取一个文件 将其加载到内存 然后返回一些信息 例如加载数据的指针和内存块的计数到 c Dll 成功将文件读取到内存 但在返回主应用程序时 程序由于堆损坏而崩溃 检测
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体

随机推荐

  • 如何从 Django/postgreSQL 数据库中获取一个随机项目?

    所以我得到了database objects all 和database objects get name 但是我如何从数据库中获取一个随机项目 我无法弄清楚如何获得它并选择一个随机项目 从所有数据库对象的列表中选择随机元素并不是一个好的解
  • Sass 是连接而不是添加? [复制]

    这个问题在这里已经有答案了 我需要在 SCSS 代码中定义宽度 如下所示 example width currentWidth 349 important Where currentWidth由循环定义 然而 Sass 最终总是连接两个数字
  • Mac OSX:使用 dtruss?

    我正在尝试在 Mac OSX Catalina 中 dtruss 进程 但是 dtrace 报告错误 sudo dtruss whoami dtrace system integrity protection is on some feat
  • 如何调试 lxml.etree.XSLTParseError:无效的表达式错误

    我试图找出为什么 lxml 无法解析由带有各种内容的 根 文档组成的 XSL 文档xml includes 我收到错误 Traceback most recent call last File s py line 10 in
  • 使用 skimage 从多边形中提取图像片段

    我想获得通过剪切图像内的多边形而产生的子图像 我在 skimage 中有一个图像 在 matplotlib patches 中有一个多边形 怎么做 以下是我尝试过的 我不一定在寻找类似于下面的方法 我正在寻找最干净 最有效的实现 使用此代码
  • 如何卸载所有 Bower 软件包?

    有时 重建整个站点并强制 Bower 重新安装 Bower json 中所有软件包的新版本很有用 但是 似乎没有任何方法可以做到这一点 尝试 1 bower uninstall bower not installed 0 不 这只能在逐个包
  • gson:将 null 视为空字符串

    I use 谷歌 gson http code google com p google gson 将 Java 映射序列化为 JSON 字符串 它提供构建器处理空值 https sites google com site gson gson
  • 是否可以将 cacerts 的所有内容导入到 jssecacerts 文件中?

    使用 keytool 或其他方法 是否有一种简单的方法将 cacerts 的所有内容导入 jssecacerts 文件 基本上 我想定义自己的 jssecacerts 但我希望 jssecacerts 也包含 cacerts 文件的所有可信
  • iOS OneDrive (skydrive) 应用程序每次运行时都会显示权限对话框

    我正在开发一个 iOS 应用程序 让用户可以访问他们的 OneDrive SkyDrive 但我遇到了一个非常烦人的问题 用户第一次将应用程序链接到 OneDrive 时 一切都会按预期进行 他们必须输入用户 ID 和密码 然后他们必须同意
  • 如果 g(n) = sqrt(n)^sqrt(n),g(n) 的复杂度是否 = O(2^n)?

    If g n sqrt n sqrt n does the complexity of g n O 2n 任何帮助表示赞赏 比较两个指数函数时的一个有用技巧是让它们具有相同的底数 n n 2lg n n 2 n lg n Now you r
  • 在 C++ 中什么时候使用向量,什么时候使用数组?

    我通常不确定什么时候使用其中一种更好 一般来说 它们似乎都做同样的事情 但就其功能而言 向量是否更灵活 什么时候数组比较合适 通常总是更喜欢使用std vector
  • 所需示例:将 arrow() 与 ggplot2 一起使用

    我想创建一个 geom path 它的箭头指向路径中的下一个位置 我可以毫无问题地获取绘图路径 例如 df lt x 1 12 y 20 31 z 1 12 p lt ggplot df aes x x y y p geom point g
  • 如何在apache服务器中部署ember-cli项目

    我有以下问题 我使用 ember cli 创建了一个 ember 应用程序 该应用程序通过 url 在 nodejs 上运行良好http localhost 4200 运行命令时ember serve 我想在 apache httpd 服务
  • 如何最好地“合并”两个对象及其在 Rails 中的关联?

    这是我的情况 我有 2 个人员对象 人员 1 和人员 2 它们是从两个不同的外部数据源创建的 我使用的手动流程已确定 person1 和 person2 实际上指的是同一个人 因此我想要做的是将它们 合并 为一个人 并删除重复项 我对对象本
  • Nginx + phpFPM:PATH_INFO 始终为空

    我在 Debian 上配置了 nginx stable 1 4 4 PHP 使用 FastCGI php fpm 效果很好 location php fastcgi split path info php alias home 1 publ
  • 获取 .NET Web 应用程序中的当前目录

    所以我有一个网络项目 我试图使用c 方法获取网站的根目录Directory GetCurrentDirectory 我不想使用静态路径 因为文件位置将来会发生变化 此方法在我的 imageProcess aspx cs 文件中运行 但我认为
  • 如何在 RichTextBox 中附加 RTF 文本,Win C#

    我在 Win C 中有一个 RichTextBox 我想在 RichTextBox 中附加一些具有粗体效果的新文本 那么我该怎么做呢 I tried string str richTextBox Rtf my logic str rtf1
  • 通过 Oracle 连接

    这是一个示例表数据 Fruit Number Apple 1 Apple 2 Apple 3 Kiwi 6 Kiwi 10 我尝试连接表列值以获得以下内容 Fruit Number Apple 1 2 3 Kiwi 6 10 有没有办法查询
  • SQLException:oracle 中的协议冲突

    我收到 违反协议 的消息 我有一个在 RedHat Linux 上运行的应用程序 数据库和应用程序共同驻留在计算机上 使用的Oracle版本 Oracle 11g R2 11 2 0 3 0 使用的 JDBC 驱动程序 12 1 0 1使用
  • 无符号字符的格式说明符

    说我要打印unsigned char unsigned char x 12 哪个是对的 这 printf d x or this printf u x 事情在其他地方 所以我遇到了这样的讨论 即使 ch 更改为 unsigned char