c/c++语言开发共享检查一个整数类型的值是否适合另一个整数类型

Type1Type2有两种类型,由不同的头提供,对于某些整数类型都是typedef,但不知道哪些(并且可能在编译器,操作系统等方面有所不同)。 该程序是否保证正常工作(如果它编译)

 Type1 a = ...; if (a == (Type2) a) { printf("a fits into Type2"); else { printf("a doesn't fit into Type2"); } 

或者是否有我不考虑的角落案件?

    如果您只担心条目的大小 ,请使用sizeof

     if (sizeof(a) == sizeof(Type2)) { printf("a fits into Type2"); else { printf("a doesn't fit into Type2"); } 

    不,我认为不幸的是这还不够。 如果例如Type1shortType2int ,则左侧的值仍将提升为int 。 所以你要比较相同类型的相同值。

    同时确保两种方式进行比较也无济于事。

    您需要做的是确保您以两种方式进行比较, 并且您投射的值是一个值,如果转换为更窄的类型将被截断。 如果两者都是无符号类型,你可以使用类似的东西

     ((T1)-1 == (T1)(T2)(T1)-1) && ((T2)-1 == (T2)(T1)(T2)-1) 

    这也具有编译时表达式的优点。

    如果签名中的一个或两个类型,则由于C中允许的不同符号表示,这更加困难。

    编辑:当我写这篇文章时,我忽略了你只想在一个方向上。

     (T1)-1 == (T1)(T2)(T1)-1 

    只是告诉你从T1转到T2时是否有信息丢失。

      以上就是c/c++开发分享检查一个整数类型的值是否适合另一个整数类型相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549894.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐