gpt4 book ai didi

c - C 中的类型转换是怎么回事?

转载 作者:行者123 更新时间:2023-12-03 14:32:17 24 4
gpt4 key购买 nike

我了解 C 中的类型转换在高层次上所做的事情。我知道有时这是隐式完成的,有时需要明确完成。但是我不知道这是如何在低级别发生的:

假设 GetSignal返回 enum类型。

 uint8 outValue;
f32_t iValue;
iValue = (f32_t)GetSignal();
outValue = (uint8)((i32_t)iValue);

我的问题是这里发生了什么。我不知道在所有这些类型转换之后如何重新组织这些位。

最佳答案

强制转换的作用是将一种类型的值转换为另一种类型的值。对于每个给定类型,此值的表示形式取决于类型。

假设 GetSignal返回一个底层值为 1 的枚举。作为一个 32 位整数,它的表示形式如下(假设大端字节序,即从高到低):

00000000 00000000 00000000 00000001

这个整数值 1 然后通过显式转换转换为 f32_t .假设此类型表示为 IEEE 754 单精度浮点值,其表示(从高到低)如下所示:
00111111 10000000 00000000 00000000

此表示存储在 iValue 中.

然后 iValue被转换到 i32_t .所以 float具有上述 IEEE754 浮点表示的值 1 被转换为 int具有此表示的值 1:
00000000 00000000 00000000 00000001

和什么是一样的 GetSignal回来。然后将此值强制转换为类型 uint8它有这个表示:
00000001

该表示存储在 outValue 中.

关于您对添加 float 的评论和一个 int , 常用算术转换 规则规定类型为 int 的值首先隐式转换为类型 float ,然后是两个 float可以添加值并且结果类型为 float .

关于c - C 中的类型转换是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61509438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com