2-1-4C语言中的强制类型转换
c语言中的定点整数使用“补码”存储的
void main(){
short x = -4321; //short占用2个字节 无符号数和有符号数 不改变数据内容 改变解释方式
unsigned short y = (unsigned short)x;
int a = 165537,b=-34991; //int型占用4个字节 长整数变短整数 a = 0x000286a1 c = 0x86a1 真值-31071
short c = (short)a, d = (short)b; 高位截断 保留低位 b = 0xffff7751 d = 0x7751 真值30545
short x = -4321; 短整数变长整数 x = 1110 1111 0001 1111
int m =x; 符号扩展 m = ( 1111 1111 1111 1111 )1110 1111 0001 1111 真值-4321
unsigned short n = (unsigned short)x; n = 1110 1111 0001 1111 真值61215
unsigned int p = n; p = 0000 0000 0000 0000 1110 1111 0001 1111真值61215
}
2-1-4-2零扩展和符号扩展!
短数据扩展为长数据
为什么要这样??
ALU位数是固定的,运算前可能需要把短数据扩展为常数据
通用寄存器的位数是固定的,把数据存入寄存器时,可能需要进行长度扩展
8bit扩展为16bit 多出来的那些位怎么填补
01011010 零扩展 00000000 01011010
10100110 00000000 10100110
零扩展适用于无符号整数 用0扩展高位
带符号整数(补码)90 0,1011010 0,00000000 1011010
带符号整数(补码)-90 1,0100110 1,11111111 0100110
符号拓展:适用于带符号整数(补码)用符号位扩展高位
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 言和和和!
评论
