【发布时间】:2016-04-25 11:13:54
【问题描述】:
有人可以澄清在 C 中将整数转换为 short 时会发生什么吗?我使用的是 Raspberry Pi,所以我知道 int 是 32 位,因此 short 必须是 16 位。
假设我使用以下 C 代码示例:
int x = 0x1248642;
short sx = (short)x;
int y = sx;
我知道x 会被截断,但有人能解释一下具体是如何截断的吗?是否使用轮班?一个数字究竟是如何从 32 位截断到 16 位的?
【问题讨论】:
-
请注意,演员表(像大多数演员表一样)是不必要的。可以声明
short sx = x;,x的值会隐式转换为short。 -
“int”和“short”的实际大小会因平台而异。但是是的,假设“int”是 32 位,“short”是 16 位:1)是的,强制转换会将值从 32 位截断到 16 位,2)是的,高 16 位是“丢失”的,3)不,没有“转变”。 PS:你知道你的树莓派可能有一个完整的Mathematica 副本吗?绝对值得一试:)
-
不完全重复,但密切相关:stackoverflow.com/q/19273658/4996248
-
顺便说一句:您可以使用
#include <stdint.h>消除位宽猜测以引入int32_t、int16_t等。