算术类型的类型转换

类型所能表示的值的范围决定了转换的过程:

  • 当把一个非bool类型的算术值赋值给bool类型时,0转换为false,否则转换为true。
  • 当把一个bool值赋给非bool类型时,false转换薇0,true转换为1。
  • 当把一个浮点数赋给整数类型时,仅保留整数部分。
  • 当把一个整数值赋给浮点类型时,小数部分记为0。如果该整数所占空间超过了浮点类型的容量,精度可能有损失。
  • 当给无符号类型赋一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。比如,8比特大小的unsigned char可以表示0至255区间内的值,如果我们赋了一个区间以外的值,则实际的结果是该值对256取模后所得的余数。因此,把-1赋给8比特大小的unsigned char所得的结果是255。
  • 当给带符号类型赋一个超出它表示范围的值时,结果是未定义的。此时,程序可能继续工作、可能崩溃,也可能生成垃圾数据。
  • 当一个表达式中既有无符号数又有int值时,int值会自动转换成无符号数:
    unsigned u=10;
    int i=-42;
    std::cout<<i+i<<std::endl;  //输出-84
    std::cout<<i+u<<std::endl;  //如果int占32位,输出4294967264

     

  •  当从无符号数中减去一个值时,不管这个值是不是无符号数,必须确保结果不能时一个负值:
    unsigned u1=42,u2=10;
    std::cout<<u1-u2<<std::endl; //正确,输出32
    std::cout<<u2-u1<<std::endl; //正确,但是结果是取模后的值

     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值