【发布时间】:2015-03-09 11:09:54
【问题描述】:
关于 C 中的整数向下转换,例如
int 值 000F'E000 向下转换为 short 或 unsigned short 将变为 E000。 short -> -8192,unsigned short -> 57344,
那么它只是简单地削减位吗?
那么向上转换呢?例如。 int -10 是ffffff81,转换为long long 的规则是什么?
@Update
关于向上转换,根据答案我做了一些测试,发现使用 2 的补码有以下规则:
签: 正 -> 正:添加 0 作为前缀位, 负 -> 负:添加 1 作为前缀位, 未签名: 添加 0 作为前缀位,代码:
// integer numbers, downcast & upcast,
#include <stdio.h>
void downcastTest() {
int i = 127<<13;
printf("%X, %hX, %hi\n", i, i, i);
}
void upcastTest() {
int i = 127;
int j = -127;
printf("%x, %llx\n", i, (long long)i);
printf("%x, %llx\n", j, (long long)j);
}
int main(int argc, char * argv[]) {
downcastTest();
upcastTest();
return 0;
}
【问题讨论】:
-
您希望通过“向上转换”
E000获得什么价值? -
@barakmanos 感谢提示,已更正为
cast,关于向上转换我已经更新了问题。 -
相关(如果不重复):stackoverflow.com/q/19262851/694576
标签: c type-conversion