c++中的隐式类型转换

概要

类型转换,分为隐式类型转换和显示类型转化。这里主要讨论含无符号性的隐式类型转化。

发生转换的情形

  1. 赋值操作
    示例:
    unsigned char c = -1; // c的结果是255。

  2. 算术表达式
    算术表达式中,含有整型与无符号型,int性会自动转化为无符号型
    示例:

    unsigned u = 10;
    int i = -42;
    cout << u + i <<endl; // int 为32 位,输出为4294967264
    

隐式类型转化规则

以下用实例来说明各种情况转化的规则。

  1. unsignedint算术运算
    int型,正数且不越界,则直接赋值;如果为负数,则负数值加无符号型的模
    示例:

    unsigned u = 10;
    int i = -42;
    u = i;
    cout << u<<endl; // 输出4294967254
    
  2. unsigned val1unsigned val2相减

    如果两者相加,则进行正常的溢出检出
    如果两者相减,规则如下:

    • val1 > val2
      正常,不涉及到数值异常变化。
    • val1 < val2
      分析:相减,得到负值,相当于得到负数int型,则负数值加无符号型的模
      unsigned u = 10;
      int i = -42;
      u = i;
      cout << u<<endl; // 输出4294967254
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值