这个问题困扰本人很久了。有没有会C++和C语言的朋友可以把这个C++的程序翻译成C语言 本人没学过C++ 可以把它翻译成C语言吗

img


这个问题困扰本人很久了。有没有会C++和C语言的朋友可以把这个C++的程序翻译成C语言 本人没学过C++ 可以把它翻译成C语言吗



#include <stdio.h>

#define LEN 32
char bin[LEN] = {0};

void bitset(float a, char *bin)
{
    unsigned int t = *(unsigned int *)(&a);
    for (int i = LEN - 1; i >= 0; i--)
    {
        bin[i] = (t >> (LEN - i - 1)) & 1;
    }
}

void print_bin(char *bin, int s, int e)
{
    for (int i = s; i < e && i < LEN; i++)
        printf("%d", bin[i]);
    // printf("\n");
}

void print_float_as_binary(char *bin, int s, int e)
{
    printf("Sign:");
    print_bin(bin, 0, 1);
    printf("\nExp:");
    print_bin(bin, 1, 9);
    printf("\nMantissa:");
    print_bin(bin, 9, 32);
    printf("\n");
}

int main(void)
{
    float a = 1.4142136;
    // printf("Enter a float number: ");
    //  scanf("%f", &a);
    bitset(a, bin);
    print_float_as_binary(bin, 0, LEN);
    return 0;
}

Sign:0
Exp:01111111
Mantissa:01101010000010011110100

这个不是最入门的吗。

#include <stdio.h>  
  
void printFloatAsBinary(float a) {  
    unsigned int floatAsInt = *(unsigned int*)(&a);  
    unsigned int sign = floatAsInt >> 31;  
    unsigned int exponent = (floatAsInt >> 23) & 0xFF;  
    unsigned int mantissa = floatAsInt & 0x7FFFFF;  
  
    printf("Sign: %u\n", sign);  
    printf("Exponent: %u\n", exponent);  
    printf("Mantissa: ");  
    for (int i = 0; i < 23; i++) {  
        printf("%u", (mantissa >> i) & 1);  
    }  
    printf("\n");  
}  
  
int main() {  
    float a;  
    printf("Enter a float number: ");  
    scanf("%f", &a);  
    printFloatAsBinary(a);  
    return 0;  
}

凑个热闹, 二进制在C中一般不可移植, 我的代码是在window10 64 系统中的, printf中用了UB格式代码

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    uint32_t Mantissa : 23;
    uint32_t Exponent : 8;
    uint32_t Sign : 1;
} fltToBit;

void print_float_as_binary(float a)
{
    char BufExponet[32] = "";
    char BufMantissa[32] = "";

    fltToBit test = *(fltToBit *)&a;

    printf("Sign: %u\nExponent: %08s\nMantissa: %023s\n", test.Sign,
           itoa(test.Exponent, BufExponet, 2),
           itoa(test.Mantissa, BufMantissa, 2));
}

int main()
{
    const float a = 1.4142136F;
    print_float_as_binary(a);
    return 0;
}

【以下回答由 GPT 生成】

我可以将给定的C++代码翻译成等价的C语言代码。以下是转换后的代码:

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

union FloatIntUnion {
    float f;
    uint32_t i;
};

void print_float_as_binary(float a) {
    union FloatIntUnion fiu;
    fiu.f = a;
    uint32_t float_as_int = fiu.i;

    char binary_repr[33];
    binary_repr[32] = '\0';
    for (int i = 31; i >= 0; i--) {
        binary_repr[i] = (float_as_int & 1) + '0';
        float_as_int >>= 1;
    }

    // 根据IEEE754标准解析
    printf("Sign: %c\n", binary_repr[31]);
    printf("Exponent: %s\n", binary_repr + 23);
    printf("Mantissa: %s\n", binary_repr);
}

int main() {
    float a;
    printf("请输入一个浮点数: ");
    scanf("%f", &a);
    print_float_as_binary(a);
    return 0;
}

解释: 1. 我们使用了一个联合体 FloatIntUnion,其中包含一个 float 类型的变量和一个 uint32_t 类型的变量。这样我们可以将一个 float 类型的值以二进制整数的方式解析。 2. 我们使用数组 binary_repr 来存储二进制表示的浮点数。这里使用字符数组而不是 std::bitset,其中每个字符表示一个二进制位。 3. 在 print_float_as_binary 函数中,我们首先将 float 类型的输入转换成 uint32_t 类型的整数。 4. 然后,我们使用循环将整数转换成二进制字符串,将结果存储在 binary_repr 数组中。 5. 最后,我们使用 printf 函数来打印解析后的二进制表示。

希望以上解决方案对您有帮助!如果您有任何问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^