led*_*ter 1 c++ int unsigned casting
在阅读以下问题的答案时
我不明白为什么有要投uint8_t给unsigned(或写在评论,甚至unsigned char在这之前),而铸造只是int不正确.
据我所知,没有任何转换会导致解释uint8_t成为一种基础类型,它可以(必须)成为3种char变体中的一些,从而将其作为一个字符打印出来.
但是施法有什么不对int?任何uint8_t值都应该始终适合int,因此转换似乎很简单.为什么sign-extension会使代码不正确(在评论中提到)?
UPD:
仅供参考,我想在我提到的问题中谈到的是一个案例signed char:
signed char num = -1;
std::cout << std::hex << static_cast<unsigned int>(static_cast<unsigned char>(num));
Run Code Online (Sandbox Code Playgroud)
如果f没有第二次演员,这将写成超过2 秒.
关于2的补码系统的观点似乎是不正确的,因为积分转换应该适用于将-1转换为unsigned <smth>,并且它遵循2的补数系统(即,当转换为例如uint8_t结果应该始终为255并因此被打印为0xff,甚至有不同的位模式).
小智 5
你是正确的铸造uint8_t到int会产生完全相同的值作为铸造uint8_t到unsigned int.测试uint8_t0 ... 255的所有可能值的简单循环将确认生成的字符串是100%相同的,并且假设所有实现必须支持int甚至高于255的值,那么在某些模糊实现的情况下不可能有限范围int可能会导致问题.
| 归档时间: |
|
| 查看次数: |
1314 次 |
| 最近记录: |