繁体   English   中英

C 整数到二进制位顺序

[英]C integer to binary bit order

下面的 C 程序显示输入的十进制数的二进制表示:

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

typedef union {
    int i;
    struct {
        unsigned int dgts: 31;
        unsigned int sign: 1;
    } bin;
} myint;

void printb(int n, int i) {
    int k;

    for (k = i - 1; k >= 0; k--)
        if ((n >> k) & 1)
            printf("1");
        else
            printf("0");
}

void display_binary(myint x) {
    printf("%d | ", x.bin.sign);
    printb(x.bin.dgts, 31);
    printf("\n");
}

int main() {
    myint decimal;

    printf("input decimal value : ");
    scanf("%d", &decimal.i);

    printf("Binary representation is:\n");
    display_binary(decimal);

    return 0;
}

程序运行正常。 我无法理解的是dgts顺序和bin结构的sign成员。 直观地说, sign成员应该在dgts之前,因为表示数据的位从左到写在内存中(据我所知)。 交换这两个成员的命令后,结果为false。 为什么dgts应该在sign之前?

  1. 位域中的位顺序是实现定义的,但大多数流行的编译器都以 LSB 开头。

  2. 数字以二进制形式存储,输入方式无关紧要。 在大多数现代系统中,负数存储为 2'2 补码。 在这个系统中,符号位“本身”不存在。 不需要特殊类型

我会把它实现为

void printb(int n) {
    unsigned int mask = 1U << (sizeof(n) * CHAR_BIT - 1);

    for (; mask; mask >>= 1)
    {
        printf("%c", (n & mask) ? '1' : '0');
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM