栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++中整数类型隐式转换

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++中整数类型隐式转换

常规同字节大小的整形转换

同字节大小的整数类型,有符号可以隐式转换为无符号,反之则不行(有警告)

因此你可以写

int8_t n = -1;
uint8_t m = n; // 255

// ...
同符号整数转换

较小字节的整数可以隐式转换到较大字节的同符号整数,反之不行(有截断风险)

因此你可以写:

int8_t n = -1;
int16_t m = n; // 也是-1
int32_t m1 = n; // 仍旧是-1
较小字节有符号整数转换到较大字节无符号整数 正确的转换路径:

比如:

因此你可以写:

int8_t n = -1;
uint16_t m = n; // 65535
uint32_t m1 = n; // 4294967295
常见的转换误区:

也就是说, int8_t 的-1转换到uint16_t的值应该是65535而不是255

如果实际确实是需要将小字节整数的值完整字节存放到较大字节无符号整数的低位

只需要强制扭转 少字节有符号整数到多字节无符号整数的转换路径:

如何扭转,其实也很简单

int8_t a = -1;
uin16_t b = uint8_t{a}; // 或者 (uint8_t)a 或者 static_cast(a)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917222.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号