[英]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
之前?
位域中的位顺序是实现定义的,但大多数流行的编译器都以 LSB 开头。
数字以二进制形式存储,输入方式无关紧要。 在大多数现代系统中,负数存储为 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.