提问人:Anonymous 提问时间:10/26/2022 最后编辑:Anonymous 更新时间:10/26/2022 访问量:232
将浮点数转换为无符号字符是否有效?
is casting float to unsigned char a valid conversion?
问:
有人可以解释一下如何铸造作品吗?这是有效的转换吗?float
uint32_t
下面代码中第一行的输出对我来说很有意义,但其余的都是我自己无法弄清楚的。
cout<<uint8_t(256+33)<<'\n';
cout<<uint8_t(float(256+33))<<'\n';
cout<<int(uint8_t(float(256+33)))<<'\n';
cout<<int(uint8_t(float(256+3)))<<'\n';
cout<<int(uint8_t(float(256+20)))<<'\n';
输出
!
�
255
255
255
uint8_t(256+33)
是 int 到无符号 char,它给出 ,这是我所期望的。但是,根本不起作用。当我尝试将输出转换为 int 时,它给了我常数。!
float
uint8_t
255
我有一个并想将其转换为,它将传递给一个函数。转换为什么有效方式?会起作用吗?我应该先转换为,然后再转换为?vector<float>
vector<uint8_t>
float
uint8_t
static_cast<uint8_t>
float
int
int
uint8_t
答:
5赞
molbdnilo
10/26/2022
#1
它们无效,但未定义。
在 C++17 中:
4.10 浮点积分转换 [conv.fpint]
浮点类型的 prvalue 可以转换为整数类型的 prvalue。转换被截断;也就是说,小数部分被丢弃。如果截断的值无法在目标类型中表示,则行为未定义。
转换是明确定义的,你不能仅仅因为结果对你有意义就假设它:int
4.8 积分转换 [conv.integral],第 2 项
如果目标类型为无符号,则结果值是与源整数一致的最小无符号整数(取模 2n,其中 n 是用于表示无符号类型的位数)。
评论
1赞
Matteo Italia
10/26/2022
完成:第一个定义良好,因为从有符号整型到无符号整型的转换被指定为工作模 2^n_bits
评论
std::cout
char
float
uint8_t