Здравствуйте. Я бы хотел установить бит (значение) в позиции (слева направо).Вот мой код, который не работает для uint64_t (здесь он должен возвращать 0, а не 1), но когда я изменяю значения, чтобы он работал (с той же логикой) с uint8_t, он работает.Есть идеи?Пожалуйста.
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <inttypes.h>
int main()
{
uint64_t x = (uint64_t)1;
int pos = 63;
bool value = 0;
uint8_t z = x;
z = z >> (64-pos);
z = z << (64-pos);
uint64_t a = (uint64_t)1;
uint64_t d = (uint64_t)0;
uint64_t y;
uint64_t c = d;
uint64_t b = x;
b = b << (pos+1);
b = b >> (pos+1);
if (value == 1)
{
y = a;
y = y << (63-pos);
}
else
{
y=d;
}
c = c|z|y|b;
printf("%lld",c);
return c;
}
РЕДАКТИРОВАТЬ: я думаю, что есть неправильно понято (я не достаточно ясно, мой плохой), на самом деле у меня есть х, который является uint64_t, и у меня есть int pos, который является позициейодного бита в х, и у меня есть значение, которое является логическим (1 или 0), и если значение равно 1, бит в позиции в х должен стать / остаться 1, а если значение равно 0, бит в позиции в х должен стать/ остаться 0.