鱼C论坛

 找回密码
 立即注册
查看: 1352|回复: 6

[已解决]如何按位输出float数

[复制链接]
发表于 2022-3-2 11:26:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问大家如何按位输出float数
最佳答案
2022-3-2 19:32:38
本帖最后由 jhq999 于 2022-3-2 19:34 编辑
  1. int main()
  2. {
  3.         float f=1.234;
  4.         scanf("%f",&f);
  5.         int i = 0;
  6.         for(i=31;i>=0;i--)
  7.         {
  8.                 printf("%d",((*(int*)&f)>>i)&1);
  9.                 if (i%4==0)
  10.                            printf(" ");
  11.                
  12.         }
  13.         return 0;
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-2 12:20:19 | 显示全部楼层
输出二进制 0000 0101 ... 那样的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-2 12:49:52 | 显示全部楼层
*(int*)&f
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-2 14:09:27 | 显示全部楼层
c_cpp_python 发表于 2022-3-2 12:20
输出二进制 0000 0101 ... 那样的?

是的是的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-2 14:38:35 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdint.h>

  3. void binary(char *buff, const void *data, size_t size) {
  4.     if(!size) {*buff = '\0'; return;}
  5.     uint8_t byte = *(const uint8_t *)&data[size - 1];
  6.     for(size_t mask = 0x80; mask; mask >>= 1) {
  7.         *buff++ = mask & byte ? '1': '0';
  8.     }
  9.     binary(buff, data, size - 1);
  10. }

  11. int main(void) {
  12.     char buff[33];
  13.     int a = 0x12345678;
  14.     binary(buff, &a, sizeof(a));
  15.     puts(buff);
  16.     return 0;
  17. }
复制代码

  1. #include <stdio.h>
  2. #include <stdint.h>

  3. void binary(char *buff, const void *data, size_t size) {
  4.     uint8_t byte = *(const uint8_t *)(data + size - 1);
  5.     for(size_t mask = 0x80; mask; mask >>= 1) {
  6.         *buff++ = mask & byte ? '1': '0';
  7.     }
  8.     if(size == 1) {*buff = '\0'; return;}
  9.     *buff++ = '_'; binary(buff, data, size - 1);
  10. }

  11. int main(void) {
  12.     // 7个'_'
  13.     // 1个'\0'
  14.     // sizeof(double) == 8
  15.     // 8 * 8 + 8 = 72
  16.     printf("sizeof(double) == %lu\n", sizeof(double));
  17.     char buff[72];
  18.     {
  19.         char data = 0x12;
  20.         binary(buff, &data, sizeof(data));
  21.         printf("char:\t%s\n", buff);
  22.     }
  23.     {
  24.         int data = 0x12345678;
  25.         binary(buff, &data, sizeof(data));
  26.         printf("int:\t%s\n", buff);
  27.     }
  28.     {
  29.         float data = 123.456;
  30.         binary(buff, &data, sizeof(data));
  31.         printf("float:\t%s\n", buff);
  32.     }
  33.     {
  34.         double data = 123.456789;
  35.         binary(buff, &data, sizeof(data));
  36.         printf("double:\t%s\n", buff);
  37.     }
  38.     return 0;
  39. }
复制代码

  1. $ ./main
  2. sizeof(double) == 8
  3. char:    00010010
  4. int:     00010010_00110100_01010110_01111000
  5. float:   01000010_11110110_11101001_01111001
  6. double:  01000000_01011110_11011101_00111100_00000111_11101110_00001011_00001011
  7. $
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-2 14:48:56 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdint.h>

  3. void binary(char *buff, const void *data, size_t size) {
  4.     uint8_t byte = *(const uint8_t *)(data + size - 1);
  5.     for(size_t mask = 0x80; mask; mask >>= 1) {
  6.         *buff++ = mask & byte ? '1': '0';
  7.     }
  8.     if(size == 1) {*buff = '\0'; return;}
  9.     *buff++ = '_'; binary(buff, data, size - 1);
  10. }

  11. int main(void) {
  12.     {
  13.         char buff[9];
  14.         char data = 0x12;
  15.         binary(buff, &data, sizeof(data));
  16.         printf("char:\t%s\n", buff);
  17.     }
  18.     {
  19.         char buff[36];
  20.         int data = 0x12345678;
  21.         binary(buff, &data, sizeof(data));
  22.         printf("int:\t%s\n", buff);
  23.     }
  24.     {
  25.         char buff[36];
  26.         float data = 123.456;
  27.         binary(buff, &data, sizeof(data));
  28.         printf("float:\t%s\n", buff);
  29.     }
  30.     {
  31.         char buff[72];
  32.         double data = 123.456789;
  33.         binary(buff, &data, sizeof(data));
  34.         printf("double:\t%s\n", buff);
  35.     }
  36.     return 0;
  37. }

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-2 19:32:38 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2022-3-2 19:34 编辑
  1. int main()
  2. {
  3.         float f=1.234;
  4.         scanf("%f",&f);
  5.         int i = 0;
  6.         for(i=31;i>=0;i--)
  7.         {
  8.                 printf("%d",((*(int*)&f)>>i)&1);
  9.                 if (i%4==0)
  10.                            printf(" ");
  11.                
  12.         }
  13.         return 0;
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 13:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表