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

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

Войти
Регистрация
Восстановить пароль
 
h8er
15 / 15 / 5
Регистрация: 20.11.2013
Сообщений: 92
#1

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

18.12.2013, 03:55. Просмотров 174. Ответов 3
Метки нет (Все метки)

C++
1
2
unsigned short x = 1;
  printf("%s\n", *((unsigned char *) &x) == 0 ? "big-endian" : "little-endian");
В данном случае, что представляет собой unsigned char* что с ним можно провести побитовую операцию?
Вообще, если возможно, объясните поподробнее.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2013, 03:55     Как работает выражение
Посмотрите здесь:

C++ Как записать арифметическое выражение
Как записать выражение? C++
Как прочитать выражение? C++
C++ Не работает регулярное выражение
C++ Как записатьь это выражение на с++?
C++ Как вычисляется выражение a+++b?
C++ Как вычислить арифметическое выражение?
C++ Как иначе можно переписать выражение?
Как правильно записать математическое выражение? C++
C++ Как правильно записать выражение
Как вычисляется выражение C++
C++ Как это выражение должно выглядеть в c++?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5411 / 4807 / 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
5411 / 4807 / 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     Как работает выражение
Ответ Создать тему
Опции темы

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