【发布时间】:2019-06-17 07:04:38
【问题描述】:
您好,我正在尝试使用 struct 在 c 中将十进制值转换为二进制。以下是我的代码:
#include <stdio.h>
struct binary{
int bin:1 ;
};
void main(void){
int dec = 24;
struct binary bi[32];
//printf("%d\n",sizeof(struct binary));
for(int i = 0 ; i < 32 ; i++){
int k = dec & 1;
bi[i].bin = k;
dec = dec >> 1;
//printf("%d ",k);
}
for(int i = 31 ; i >= 0 ; i--){
printf("%d ",bi[i].bin);
}
}
当我打印值时,我在位字段 (0000_0000_0000_0000_0000_0000_000-1_-1000) 中看到 -1 代替了 1。有人可以知道为什么会这样吗?而且我认为结构的大小是 1 位,但是当我执行 sizeof(struct binary) 时,它显示为 4 个字节,你知道为什么吗?
TIA
【问题讨论】:
-
@sandywho 使用 unsigned int bin:1 ;
-
int bin:1;表示您仅使用 1 位有符号值。编译器会将其保存在整数大小的内存中。要获得 1 而不是 -1,请将 bit 定义为unsigned bin : 1; -
@sandywho 当您打印
sizeof(struct binary)时,您得到了什么价值?如果你打印sizeof(bi),你会得到什么尺寸? -
为此使用结构没有任何优势,与仅使用
int或unsigned int数组相比,由于结构填充,sizeof(struct binary)将成为sizeof(int)。 -
@user3386109 分别为 4 和 128
标签: c struct bit-manipulation bit