【发布时间】:2016-10-05 17:02:28
【问题描述】:
#include <stdio.h>
#include <stdint.h>
struct __attribute__((__packed__)) sf_header
{
uint64_t lower: 32;
uint64_t higher: 32;
};
int main()
{
struct sf_header h;
// part 1;
h.lower = 15;
h.higher = 1;
printf("lower part: %d\n", h.lower);
printf("higher part: %d\n", h.higher);
//part 2: how to printf the whole 64-bits (a row)
unsigned long int lower = h.lower;
unsigned long int higher = h.higher;
higher = higher << 32;
printf("lower: %ld\n", lower);
printf("higher: %ld\n", higher);
unsigned long int final = lower | higher;
printf("Final: %ld\n", final);
return 0;
}
它在 64 位上运行,long int 是 8 字节,是一个行大小。
首先,我将两个值分配给低 32 位和高 32 位。
如果我想获得 64 位并使用它怎么办?
我需要做第 2 部分还是有一种简单的位域方法可以做到这一点?
【问题讨论】:
-
用
union? -
您知道
uint64_t并部分使用它的任何原因,但随后使用unsigned long不保证有64 位?为什么不直接打印uint64_t类型呢?你知道inttypes.h吗? -
"如果我想获得 64 位并使用它怎么办?"你想完成什么?
-
位域宽度大于
int/unsigned不一定支持。可移植代码一般不会尝试uint64_t lower: 32;
标签: c bit-fields