c++ - 将超出范围的整数分配给带符号的 char 类型
问题描述
signed char a = 128;
假设一个字节是 8 位,这是未定义的吗?
我所知道的是,将超出范围的值分配给有符号类型是未定义的,但 Bjarne Stroustrup 在 C++ 编程语言中说,如果我将整数 255 分配给 8 位字节机器上的 char,其中 char 已签名结果是-1。
解决方案
这是未定义的吗?
不。
我所知道的是,将超出范围的值分配给有符号类型是未定义的
也没有。
支配这一点的规则是整数类型之间的转换。转换是用于初始化还是赋值无关紧要。
将整数值转换为有符号整数类型时,如果结果不可表示,则:
在当前标准 C++17 中:结果值将由实现定义。
在即将发布的标准 C++20 中:该值将与原始值模 2 N一致,其中 N 是目标类型的宽度(就像无符号整数一样)。-1 与 255 模 2 8一致。
请注意,与转换不同,有符号算术溢出的行为是未定义的。
推荐阅读
- ibm-mq - IBM Mq 客户端与现有 cpp 应用程序的链接
- java - 如何在 libGDX 中向我的表中添加图像/纹理?
- python - 从头到尾计算 CSV 中的行中的沿袭
- css - 为什么我的 CSS 动画不能按我想要的方式工作
- azure - 尝试扩展应用服务计划时出错 扩展并更正用于 VNET 集成的应用服务计划 SKU
- vue.js - 在 VueJS 3 中从菜单打开组件
- json - 是否可以为 log4j2 记录器编写 JSON 自定义字段
- javascript - 如何使用 vuejs 让动态图片出现在 vue 中?
- flutter - 如何使用 Flutter (tflite) 在图像中执行人脸检测
- ios - 我想在我的 iPad 上导出 ofx 文件类型扩展名?有什么建议么?