将 16 位整数向下转换为 8 位整数有什么替代方法?

问题描述 投票:0回答:1

我有以下代码可以更新粒子的速度:

effect.vel = new Vector3Int((sbyte)Randy() / 4, 
                            (sbyte)Randy() / 4, 
                            (sbyte)Randy() / 4);

Randy()
返回随机 16 位有符号整数。

sbyte
的转换确实是有目的的;移除后,粒子速度会更大。

但据我了解,转换也会以某种方式“随机化”该值,因为它会截断它。

你能建议一种不那么令人困惑的方法(不涉及演员表),但仍然会产生同样的结果吗?

casting integer downcast
1个回答
0
投票

首先请说明下次是C#。

接下来,

Convert.ToSByte(number)
还会将您的数字转换为 sbyte,但使用强制转换更好,但您不喜欢这样做。

但是,问题是您正在创建一个 16 位整数并将其转换为 8 位整数。你正在将内存减半。这就是为什么它是“随机化”的。

我不确定你的目标是什么,但如果你只是想要一个较小的数字,请尝试对其进行数学计算。例如,如果您想截断一半数字,则只需执行以下操作:

short example = 1234;
        example = (short)(example/100);
        Console.WriteLine(example); 

将随机 1234 转换为 12。

© www.soinside.com 2019 - 2024. All rights reserved.