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++”的问题。没有这样的语言,而且两种语言中的类型系统(即使是纯整数类型)也有很大的不同,因此许多问题的答案会根据您实际使用的语言而有所不同。

10-08 14:18