На данный вопрос уже ответили:
(uint64_t)1 << (size- (size - 1) / 64*64) 1 unsigned __int64
((uint64_t)1 <<64) 0 unsigned __int64
(size- (size - 1) / 64*64) 64 int
int size=128;
Почему первое выражение не 0?
Visual C++ 2017
Из стандарта ([expr.shift]p1) об <<
:
Если правый операнд отрицательный либо его значение больше или равно длине (в битах) левого операнда после расширения, то поведение программы не определено.
128-(128-1)/64*64 = 64
Т.е. равно длине левого операнда - так что поведение не определено...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имею api формата localhost/api/?authmethod={"username" : "value1", "password" : "value2"}
При изучении Stream API, часто встречал употребление выражений lazy и eager операторы, но нигде толком не мог найти нормальное определение этих понятий