跳转至

强制类型转换

C语言中的定点整数是用“补码”存储的

1. 占用位数相同的情况

无符号数与有符号数不改变数据内容,改变解释方式

// 1110 1111 0001 1111  真值-4321
short x = -4321;

// 1110 1111 0001 1111  真值61215
unsigned short y = (unsigned short)x;

2. 长整数变短整数

// 00000000 00000010 10000110 10100001
int a = 165537;
// 11111111 11111111 01110111 01010001
int b = -34991;
// 10000110 10100001   真值 -31071
short c = (short)a;
// 01110111 01010001   真值 30545
short d = (short)b; 

int型占4个字节,short型占2个字节,直接高位截断,保留低位

3. 短整数变长整数

// 11101111 00011111  真值-4321
short x = -4321;

// 11111111 11111111 11101111 00011111  真值-4321
int m = x;

// 11101111 00011111  真值61215
unsigned short n = (unsigned short)x;

// 00000000 00000000 11101111 00011111 真值61215
unsigned int p = n;
冀ICP备17031746号-6