@MayRiv

При компиляции под x32 __uint64_t-переменные не желает сдвигаться на 32 разряда, что не так?

Переменная сдвигается не значения < 32, но но при сдвиге сильнее, значение обнуляется. По сути, переменная ведёт себя как 32-разрядная, но я же обьявляю её как unsigned long long int.
С чем связано подобное поведение?
  • Вопрос задан
  • 292 просмотра
Решения вопроса 1
maaGames
@maaGames
Погроммирую программы
Тут проблема очень хитрая. оба аргумента должны быть 64битные.
Например:
__int64 a = 1ull << 33; // сработает,
__int64 b = 1 << 33; // обнулится
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Psionic
В х32 в независимости от типа аргументов байтовый сдвиг всегда возвращает тип под размер регистра. Так что если значение уехало за х32 - то все, хотя ассемблерная вставка может помочь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы