c - 有符号整数类型及其对应的无符号整数类型
问题描述
对于每个有符号整数类型,标准保证存在相应的无符号整数类型。6.2.5 p6
:
对于每个有符号整数类型,都有一个对应的(但不同的)无符号整数类型(用关键字指定
unsigned
),它使用相同的存储量(包括符号信息)并具有相同的对齐要求。
用关键字指定unsigned
的短语让我感到困惑,我查阅了标准的早期版本以了解它是否出现在那里。C89/3.2.1.5提供了完全相同的措辞:
对于每个有符号整数类型,都有一个对应的(但不同的)无符号整数类型(用关键字指定
unsigned
),它使用相同的存储量(包括符号信息)并具有相同的对齐要求。
现在考虑uintptr_t
和intptr_t
;uintmax_t
和intmax_t
; 等等......(这是可选的,但如果实现定义了这些类型)。
问题:根据我上面引用的定义,不是uintptr_t
对应的无符号整数类型intptr_t
,uintmax_t
而是对应的无符号整数类型intmax_t
?
我担心它,因为通常的算术转换使用术语6.3.1.8 p1
:
否则,两个操作数都转换为与带符号整数类型的操作数类型对应的无符号整数类型
所以我试图理解通常的算术转换的语义,比如uintptr_t
和intptr_t
.
解决方案
根据 7.20(4) 这些是 typedef 名称,而不是基础类型。
对于实现提供的此处描述的每种类型,261)
<stdint.h>
应声明 typedef 名称并定义相关的宏。
7.20.1(1) 说:
当 typedef 名称仅在不存在或存在初始 u 时有所不同时,它们应表示相应的有符号和无符号类型,如 6.2.5 中所述;
所以我相信这些都需要遵循与基本整数类型相同的默认转换规则。
推荐阅读
- python - Python pandas 添加一个具有值的列,将列与某些外部集进行比较
- r - dplyr::slice_max() 中 order_by 参数的功能
- reactjs - 尝试将 React 应用部署到 Azure 应用服务时出错
- sql - Hive SQL - 标志,案例何时
- python - 保持刷新页面直到元素可点击?
- django - 根据 Django 中的下拉选择查询和过滤数据库的最佳方法
- python - 使用 ODEINT 的二阶耦合 ODE
- css - 关键帧淡入,但如何让它在点击时淡出?
- lua - Lua 图形显示在现有窗口上
- css - 具有位置的中心导航栏 css:固定