Я пытался установить 46-й бит в регистре, который из 64-битной ширины, используя C. Как мне установить этот бит?
В настоящее время я делаю это:
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);}