gpt4 book ai didi

c - 将 16 位有符号整数表示为 0-100 之间的值

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:37 25 4
gpt4 key购买 nike

我对编程还比较陌生,而且数学一直很糟糕。我有一个程序采用 16 位签名 INT -32,768 +32,768 我想将这些值表示为 1-100 正侧和 -1 - -100 在负侧,以便它们更易于使用。所以基本上 100 等于 32,768; 50 等于 16,384;等我怎样才能轻松完成这个?我正在用 C 编程,尽管我认为这更像是一个数学问题。

最佳答案

你的要求看起来很奇怪,因为如果你试图生成整数,你可以只使用 16 位整数值中的 [-100, 100] 范围(通常是 short)和...好吧,就这样吧。

如果您还希望它包含 decimal 值,那么您需要考虑它无法以非常好的方式表示 [-100, 100] 的范围...如果你要求从另一个 16 位整数值存储一个 16 位整数值,你可以这样做它会非常困惑:

int16_t normalized = ( rawvalue / 327 ); // <--- scaled, rawvalue is int16_t

但是,您正在失去精度并且在某些值范围内存在混叠,所以这看起来……不太好。如果您可以存储 floatdouble,或者可以更好地保存值 [-100, 100]:

double normalized = ( rawvalue * ( 32768.0 / 100.0 ) );
// float normalized = /*... */ Append "f" for "float" math instead on those constants

您的要求似乎...很奇怪,但这就是您的要求。祝你好运!

编辑:

作为最后的建议,我会说除非你的程序的另一部分要求 100 -> -100,如果你使用 floatdouble 使用范围[-1.0, 1.0] infinitely 更易于使用,并且在执行诸如缩放数字等其他输入和输出的操作时可以更强大,包括将进入的原始整数值一个服务器。 (INT16)(0.75 * MAX_MOTOR_VALUE) 比 100 到 -100 的骗局要好得多。

关于c - 将 16 位有符号整数表示为 0-100 之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16006928/

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