говорит, у меня есть следующие union
:Проблемы с uint64_t типом
typedef union
{
char array[8];
uint64_t u64;
} my_type ;
Я хочу, чтобы переместить один бит 1
через все 64
бит зарезервированных, здесь является то, что я пробовал:
...........................
my_type vector ={0};
short index =0;
for (index=0 ; index <64;index++){
printf(" u64 : %d\n", vektor.u64);
vektor.u64 = (1<<index) ;
}
выход прекрасно сообщает 15th
, и это не проблема с параметрами printf
, значение определенно неверно = 0. вот вывод:
u64 : 0
u64 : 1
u64 : 2
u64 : 4
u64 : 8
u64 : 16
u64 : 32
u64 : 64
u64 : 128
u64 : 256
u64 : 512
u64 : 1024
u64 : 2048
u64 : 4096
u64 : 8192
u64 : 16384
u64 : -32768
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
u64 : 0
Так что мой вопрос в том, что я делаю неправильно? Кстати, я использую ATmelStudio6.2.
предупреждения Включите компилятор, и компилятор скажет вам, что вы используете неправильный формат. – gnasher729
1 << индекс на 32-битном компьютере - неопределенное поведение при индексе ≥ 32. – gnasher729
нужно объявить 1 как 64-битную длину – user3629249