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语言中的强制类型转换与机组的联系的主要内容,如果未能解决你的问题,请参考以下文章

C语言中的.c和.cpp有啥区别?

强制类型转换 字符串和数字互相怎么转换

c语言强制转换的疑问

关于C语言的语法中类型转换的一个问题。求教C语言高手。

关于强制类型转换(c语言)

请教一下有关C语言用(float)强制转换的用法