@ProCxx

Страница 851 из 2477
Aidar
09.05.2017
13:02:46
Ну е

Александр
09.05.2017
13:03:00
Вообще, знаете о чем был изначальный вопрос?)

Alexander
09.05.2017
13:03:19
Реинтерпрет каст в битсет
читать умеем? Сказали же, что нельзя взять и скастить просто так

Google
Evgeniy
09.05.2017
13:05:10
я б затемплейтил функции которые кастят к uint64_t и применяют bitwise operations

Andrei
09.05.2017
13:07:27
Если хочется еще и аккуратно и по-взрослому, то можно использовать std::aligned_storage и прочие c++11 штуки для работы с выравниванием, чтобы получать детерминированный layout своих объектов.

Александр
09.05.2017
13:09:48
А вопрос был следующий. Почему данный код: https://hastebin.com/juzuxulice.cpp Даёт следующий результат: https://hastebin.com/awicijobag.cpp Точнее не "почему?", а "как исправить этот UB?".

Andrei
09.05.2017
13:11:44
А BitRepresentation это что?

Antony
09.05.2017
13:14:43
> почему нельзя reinterpret_cast? Потому, что alignment у short не равен alignment у long long. В итоге на x86 вы получите адовую просадку произаодительности, т.к. будете выполнять инструкцию над неверно выровненными данными. На ARM же ваше приложение просто упадёт.

Александр
09.05.2017
13:24:11
А BitRepresentation это что?
Это мой класс из uint8_t[sizeof(T) * 8] и std::bitset<sizeof(T)*8>& Bits() { ... }

Evgeniy
09.05.2017
13:24:52
template<typename T> flip_bit (uint_fast8_t bit_num, T data) { return (T) ((uint_fast64_t)data ^ (1ull << bit_num)); }

Александр
09.05.2017
13:24:54
memcpy в unsigned long long l; return std::bitset{l};
Не решает проблему с std::array<std::array<....>>

template<typename T> flip_bit (uint_fast8_t bit_num, T data) { return (T) ((uint_fast64_t)data ^ (1ull << bit_num)); }
Опять же. Зачем изобретать велосипед? Я с масками умею работать. Но bitset лучше

Andrei
09.05.2017
13:25:45
Berkus
09.05.2017
13:26:03
Это мой класс из uint8_t[sizeof(T) * 8] и std::bitset<sizeof(T)*8>& Bits() { ... }
у тебя operator == неправильно имплементирован похоже

Google
Александр
09.05.2017
13:26:07
Почему нет?
Не влезет в unsigned long long?)

у тебя operator == неправильно имплементирован похоже
Там сравниваются битсеты полученные. У них-то он правильно имплементирован

Berkus
09.05.2017
13:26:47
нет, битсет конструируется с фиксированным размером в битах

от 1 лонга до N

Andrei
09.05.2017
13:27:04
Не влезет в unsigned long long?)
Не влезет, да, Evgeniy выше предлагал написать шаблонную магию, которая сконструирует битсет правильного размера.

Александр
09.05.2017
13:28:01
Вы все отвечаете не на тот вопрос. Я знаю способы, как это реализовать. Мне интересно, почему конкретно этот способ даёт такое странное поведение

Berkus
09.05.2017
13:28:01
шаблонная магия наверное называется boost::dynamic_bitset

покажи свой BitRepresentation то уже

Александр
09.05.2017
13:28:44
https://hastebin.com/ohahoyaqik.cpp

Admin
ERROR: S client not available

Andrei
09.05.2017
13:30:10
Александр
09.05.2017
13:30:21
ЖЕСТЬ
Спасибо, я старался

Andrei
09.05.2017
13:30:35
Зачем перевыделять да еще и динамически память?

Александр
09.05.2017
13:31:00
Зачем перевыделять да еще и динамически память?
Динамика - потому что move на указатель быстрее, чем копирование данные

потому что я написал 3 строки, за минуту на телефоне, а ты код сколько дебажишь?
Я работаю с кодом не для того, чтобы быстро написать пару костылей, а чтобы разобраться и сделать выводы на будущее

Andrei
09.05.2017
13:31:59
Динамика - потому что move на указатель быстрее, чем копирование данные
Или у меня с глазами проблема или у тебя там и так memcpy

Храни ты в этой структуре СРАЗУ bitset нужного размера.

Google
Александр
09.05.2017
13:32:27
Или у меня с глазами проблема или у тебя там и так memcpy
memcpy для копирования. Для мува там свап указателей

template<typename T> flip_bit (uint_fast8_t bit_num, T data) { return (T) ((uint_fast64_t)data ^ (1ull << bit_num)); }
Для всех типов, у которых размер не больше 8 байт, ага

Страница 851 из 2477