代码之家  ›  专栏  ›  技术社区  ›  Alexey Romanov

检查一个整数类型的值是否适合另一个整数类型

  •  1
  • Alexey Romanov  · 技术社区  · 14 年前

    有两种类型 Type1 Type2 由不同的头提供,对于某些整数类型来说,这两个头都是typedef,但不知道是哪一个(而且可能在编译器、操作系统等中有所不同)。这个程序能保证正常工作吗(如果它编译的话)

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

    还是有我没有考虑的角落案例?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Nathan Fellman    14 年前

    如果你只是担心 入口的,使用 sizeof

    if (sizeof(a) == sizeof(Type2)) {
      printf("a fits into Type2");
    else {
      printf("a doesn't fit into Type2");
    }
    
        2
  •  0
  •   Jens Gustedt    14 年前

    不,我认为不幸的是这还不够。如果例如 Type1 short Type2 int 内景 . 所以你在比较同一类型的相同值。

    你要做的是确保你用两种方法进行比较

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

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

    编辑:

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

    只是告诉你从 T1 T2