C/C++ 内置类型转换注意点

 //当无符号整数强制转,则高位字节被丢弃
 unsigned short a =0xabcd;		    //0x0022FA80  cd ab cc cc
 unsigned char  b =(unsigned char)a;//0x0022FA77  cd cc cc cc  b =0xcd  高位字节0xab 被丢弃

 //当窄类型向宽类型赋值时,宽类型有存够的字节来容纳,则不会有任何问题。
 unsigned char c =0xcd;
 unsigned short d =c;
 short d1 =c;

 //当类型无符号整型转换成有符号整型时。当整数小于0x8000时,可以转换。当大于等于0x8000时,强制转换则变成负数。
 unsigned  short us1=0x8000;//us1 = 32768
 short s1=(short)us1		;//s1 = -32768

 unsigned  short us2=0x8001;//us2 = 32769
 short s2=(short)us2;		//s2 = -32767

 //当有符号类型赋值给无符号类型时,当在正数范围,则可以转换。当为负数,则变为一个很大的数。
 short   n1 =-1;           //0x0038FE04  ff ff cc cc     n1 = -1
 unsigned   short us3 =n1; //0x0038FDF8  ff ff cc cc     us3 = 65535

 //整数与浮点数之间关系
 //浮点数使用 IEEE(电气和电子工程师协会)格式。 浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 excess-127 二进制指数和一个 23 位尾数。
 // 尾数表示一个介于 1.0 和 2.0 之间的数。 由于尾数的高顺序位始终为 1,因此它不是以数字形式存储的。
 // 此表示形式为 float 类型提供了一个大约在 3.4E–38 和 3.4E+38 之间的范围。
 unsigned int i =0x1000001; 
 float  f1=(float)i;      

 unsigned int i1 =0x40001; 
 float  f2=(float)i1;     
 //float只能存在unsigned int 和int 的部分。相反也是,超过23bit就会导致错误。
 unsigned int i2= 0x800001;
 float  f3=(float)i2;     
 //总结 这些强制转换都是在无符号整数(原码),有符号整数(补码),以及float 浮点数在位模式上的转换。内存内容不变,只是解码二进制方式不同造成的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值