0x5.b6p12为什么是float不是double

新手上路,请多包涵

如题如题谢谢大佬

阅读 4.5k
2 个回答

明明是 double

https://www.ideone.com/cqjH6r

#include <stdio.h>
#define typename(x) _Generic((x),                                                 \
        _Bool: "_Bool",                  unsigned char: "unsigned char",          \
         char: "char",                     signed char: "signed char",            \
    short int: "short int",         unsigned short int: "unsigned short int",     \
          int: "int",                     unsigned int: "unsigned int",           \
     long int: "long int",           unsigned long int: "unsigned long int",      \
long long int: "long long int", unsigned long long int: "unsigned long long int", \
        float: "float",                         double: "double",                 \
  long double: "long double",                   char *: "pointer to char",        \
       void *: "pointer to void",                int *: "pointer to int",         \
      default: "other")
      
int main(void) {
    // your code goes here
    printf("%s\n", typename(0x5.b6p12));
    return 0;
}

output:

double

C99,后缀f、F表示float,后缀l、L表示long double,没有后缀默认为double。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进