ボーランドはunsigned intにどのように短くキャストしますか?私はキャスト1で57000を取得していけないのはなぜボーランドC/C++の符号なし整数へのキャストショート
sNum = -8536
usNum = 57000
uiNum = 4294958760
uiNum = 57000
:unsigned int型に短い(unsigned short型への暗黙のキャストはunsigned 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);
}
は私に出力を与えますか?
OK]をクリックして、引数のthatsが、問題は、あなたが他の署名の変数で変数を使用する場合、-8536の値が使用されています。 – harry
いいえ、2番目のケースでは、間違った型を 'printf'に渡すための未定義の動作が得られます。 (技術的には、表現が同じである必要があるので、値が正の場合は 'unsigned'の代わりに' int'を渡すことができると信じますが、ここでは 'int'を渡します(' sNum ')は負です。)' int'と 'short'が同じサイズでなければ57000を印刷することはできません。 –