【发布时间】:2020-05-11 03:17:48
【问题描述】:
我试图使用 C 设置一个 64 位宽的寄存器中的第 46 位。我该如何设置这个位?
目前我正在这样做:
uint32_t= address ;
uint64_t data =1ULL << 46;
打印这表明第 14 位正在设置。我无法设置第 32 位。如果我设置第 32 位,它会设置第 0 位。33 将设置第 1 位。看起来它在 0- 之后进行循环移位31 再次从 0 开始。
以 64 位宽注册。
知道如何设置这个位吗?
例如:
reg_addr.val = FEATURE_REG;
printf(stdout, "Programming enable at address %x=%llx\n",
reg_addr.val,reg_addr.val);
data.val = (1ULL << 46);
printf("Data value %llx\n",data.val);}
【问题讨论】:
-
@Thej 不,你不是,你已经问了 8 个问题,其中有 5 个问题你应该考虑你收到的最佳答案。
-
您的编译器似乎有问题。试试
(1ULL << 23) << 23看看是否能解决问题。 -
你能展示一个完整的例子吗?因为换档是正确的。
-
你如何检查设置的位?
-
我正在读回寄存器值。
标签: c bit-manipulation