Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
#1

Reinterpret_cast - C++

22.04.2012, 15:55. Просмотров 662. Ответов 2
Метки нет (Все метки)

Не могу понять к чему тут этот каст и каким образом он влияет на результат.


C++
1
char zxc = ((*(reinterpret_cast<const char*>(&(todo == 0 ? length : (todo == 3 ? md: sec))) + cur_length_byte) & (1 << pos)) >> pos);
result = 0

C++
1
char qwe = (((todo == 0 ? length : (todo  == 3 ? md: sec)) + cur_length_byte) & (1 << pos)) >> pos;
result = 1
При todo = 0, pos = 1, length = 9, cur_length_byte = 1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2012, 15:55     Reinterpret_cast
Посмотрите здесь:

reinterpret_cast C++
reinterpret_cast помогите разобраться C++
C++ reinterpret_cast<...>(...)
C++ Преобразование (reinterpret_cast)
Оператор reinterpret_cast C++
Как работает reinterpret_cast? C++
C++ Не получается reinterpret_cast<uint64_t>
C++ Reinterpret_cast массива структур
Reinterpret_cast <MyType> (void*) C++
По функции reinterpret_cast C++
C++ Reinterpret_cast и указатели
C++ Reinterpret_cast на машином уровне

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.04.2012, 16:24     Reinterpret_cast #2
мда. писать все в одной строке - то еще зло. понять друго что происходит.
по вашей проблеме:
после выкидывания невлияющего на результат кода и принимая во внимание что length == 0
все это дело можно упростить до:
C++
1
2
3
4
5
6
7
8
const char res1 = *(reinterpret_cast<const char*>(&length) + cur_length_byte);
const char res2 = length + cur_length_byte;
 
В перовой строчке берется адрес переменной length, к этому адресу прибавляется
cur_length_byte байт (ну т.е. один байт т.к. cur_length_byte==1 ). после вот такого
складывания получается укзатель, который указывает за переменную length. потом
этот указатель разыменовывается. это конечно же не то же самое, что складывание
двух переменных. Вот поэтому результаты отличаются.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
22.04.2012, 16:25     Reinterpret_cast #3
Приведение типов
Yandex
Объявления
22.04.2012, 16:25     Reinterpret_cast
Ответ Создать тему
Опции темы

Текущее время: 09:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru