borland如何将无符号整型转换为short?Borland C/C++无符号整型缩写
#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
为什么我不中投1中得到57000:短unsigned int类型(?有没有隐式转换为无符号短投给无符号整型前)?
好的那一个说法,但问题是,当您使用与其他签署变量变量,则使用的-8536值。 – harry 2010-11-28 12:31:34
不,在第二种情况下,您会得到未定义的行为,将错误的类型传递给`printf`。 (从技术上讲,如果值是正数,我相信你可以传递`int`来代替`unsigned`,因为表达式必须是相同的,但这里是你传递的'int'(sNum的提升值`)是负数)。除非`int`和`short`具有相同的大小,否则我不认为它可以打印57000。 – 2010-11-28 13:22:48