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

Как работает выражение - C++

Восстановить пароль Регистрация
 
h8er
15 / 15 / 5
Регистрация: 20.11.2013
Сообщений: 92
18.12.2013, 03:55     Как работает выражение #1
C++
1
2
unsigned short x = 1;
  printf("%s\n", *((unsigned char *) &x) == 0 ? "big-endian" : "little-endian");
В данном случае, что представляет собой unsigned char* что с ним можно провести побитовую операцию?
Вообще, если возможно, объясните поподробнее.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.12.2013, 04:02     Как работает выражение #2
Это не побитовая операция. Адрес x приводится к указателю на unsigned char, потом разыменовывается и содержимое сравнивается с 0.
h8er
15 / 15 / 5
Регистрация: 20.11.2013
Сообщений: 92
18.12.2013, 04:08  [ТС]     Как работает выражение #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Это не побитовая операция. Адрес x приводится к указателю на unsigned char, потом разыменовывается и содержимое сравнивается с 0.
А не могли бы вы объяснить подробнее, что происходит?
(unsigned short*) &x какой результат данного выражения? что происходит в памяти в этот момент.
и какой разультат последнего выражения(разыменования)?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.12.2013, 04:24     Как работает выражение #4
Цитата Сообщение от h8er Посмотреть сообщение
что происходит в памяти в этот момент.
В памяти ничего не происходит. Меняется трактовка компилятором того, что находится по адресу переменной. Извлекается содержимое младшего байта (в архитектуре х86 младший байт первый в памяти по адресу) переменной unsigned short, и сравнивается с 0.

Добавлено через 2 минуты
Чтобы извлечь содержимое именно одного байта, а не двух (размер unsigned short) и делается приведение к unsigned char*.

Добавлено через 1 минуту
Чтобы лучше видно было, можно так написать и поэкспериментировать:
C++
1
2
3
unsigned short x = 0x0001; // старший байт 00, младший байт 01
    
printf("%s\n", *((unsigned char *) &x) == 0 ? "big-endian" : "little-endian");
Yandex
Объявления
18.12.2013, 04:24     Как работает выражение
Ответ Создать тему
Опции темы

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