c语言类型转换注意总结

今天看了下计算机笔试相关的题,对c语言类型转换做了一点点实验,解决了以前的迷茫!

1.signed和unsigned的区别

对于这个区别我想说的是,无论是多少字节的类型,我认为只看最高位是1还是0。

如果是1的话,signed向unsigned转换时将转化为无符号型数据(即无负数)将成为正数,

如果是0的话,signed向unsigned转化时将不改变原有正负性。

unsigned向signed转化时同理。

2.字节长度大的与字节长度小的之间能的转化

如:char 一个字节向int (windows 32位机器)转化时将用其最高位来填充int型的高位3个字节

相反,将截取最后一个字节作为转化后的结果。

其他,int与float,原理一样

附上我的测试代码:

#include<stdio.h>

int main(){
	signed char a=0xe0;
	unsigned int b = a;
	unsigned char c = a;
	int d = 2147483647; 
	char e = d;
	printf("a.size = %d ,b.szie = %d ,c.size = %d \n",sizeof(a),sizeof(b),sizeof(c));
	printf("a = %d, b = %u , c = %d \n",a,b,c);//2^32-2^5-1
	printf("d = %d (int) , e = %d (char) ",d,e);
	/*
	在将a 向unsigned int型转化时,
	由于signed char是一个字节的,将用其高位进行填充b的高位的3个字节 结果为11111111 11111111 11111111 11100001
	将 a 向unsigned char转化时高位的符号位将做位数据为出现结果为 11100001的整型结果即:2^8-1-2^5+1 = 224
	d为01111111 11111111 11111111 11111111转化为char时将从最后一个字节截断,去最后一个字节作为结果
	*/
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值