C语言中的强制类型转换与机组的联系
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中的强制类型转换与机组的联系相关的知识,希望对你有一定的参考价值。
测试代码块
void main(){
// 1
short x=-4321; //short型占用2个字节
unsigned short y=(unsigned short)x;
// 2
int a=165537, b=-34991; //int型占用4个字节
short c=(short)a, d=(short)b; //short型占用2个字节
// 3
short x=-4321;
int m=x;
unsigned short n=(unsigned short)x;
unsigned int p=n;
}
研究与结论
代码1:
在代码1 中:
x:1110 1111 0001 1111 真值-4321
强制转化为无符号时变成:
y:1110 1111 0001 1111 真值61215
结论1:
无符号数与有符号数:
不改变数据内容,改变解释方式。
代码2:
int型占用4个字节
将int类型强制转化为short时:
short型占用2个字节
a b c d 结果:
a:0x000286a1 真值165537
c:0x86a1 真值-31071
b:0xffff7751 真值-34991
d:0x7751 真值30545
结论2:
长整数变短整数:
高位截断,保留低位。
代码3:
short x转化为int m ,因为 C 语言中定点整数是用“补码”存储的,所以前面补1。
short x转化为 无符号 n 真值发生改变
unsigned short n 转化成 unsigned int p ,无符号前面补0。
x:1110 1111 0001 1111
16进制:0xef1f
m:1111 1111 1111 1111 1110 1111 0001 1111
16进制:0xffffef1f 真值-4321
n:1110 1111 0001 1111
16进制:0xef1f 真值61215
p:0000 0000 0000 0000 1110 1111 0001 1111
16进制:0x0000ef1f 真值61215
结论3:
短整数变长整数:
符号扩展。
以上是关于C语言中的强制类型转换与机组的联系的主要内容,如果未能解决你的问题,请参考以下文章