borland如何将短整型转换为无符号int?
#include <stdio.h>
void main() {
short sNum = 57000;
unsigned short usNum = sNum;
unsigned int uiNum;
printf("\r\nsNum = %d", sNum);
printf("\r\nusNum = %u", usNum);
//cast 1: short -> unsigned int
uiNum = sNum;
printf("\r\nuiNum = %u", uiNum);
//cast 2: unsigned short -> unsigned int
uiNum = (unsigned short)sNum;
printf("\r\nuiNum = %u", uiNum);
}
给我输出:
sNum = -8536
usNum = 57000
uiNum = 4294958760
uiNum = 57000
为什么在cast 1中没有57000:short to unsigned int(在cast to unsigned int之前是否没有隐式cast to unsigned short?)?
最佳答案
你的代码中只有一个类型:
uiNum = (unsigned short)sNum;
在C语言中,调用强制转换的其余部分称为(隐式)转换。转换中没有隐藏的中间步骤。如果要遍历中间类型,可以通过强制转换或赋值将其强制转换为该类型的变量。
其次,行:
short sNum = 57000;
具有实现定义的行为。应该避免代码将(隐式或通过强制转换)值转换为值不适合的有符号类型。
最后,你不应该问这样一个关于“C/C++”的问题。没有这样的语言,而且两种语言中的类型系统(即使是纯整数类型)也有很大的不同,因此许多问题的答案会根据您实际使用的语言而有所不同。