anonymous
написал 8 сентября 2005 года в 15:27 (727 просмотров)
Ведет себя
неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.
unsigned char ch[4];
*(unsigned long*)(&ch) = 0xAD;
что этот фрагмент может значить??
и почему именно так??
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Пример неумного выпендривания. Дядя решил присвоить значения всему массиву сразу. Сейчас в ch[3] находится байт 10101101, а в остальных трех элементах массива ch[] находятся нули.
Неумно, потому что подразумевает sizeof(char) = 1, sizeof(long) = 4, что, конечно верно для 8×86, но может быть неверно для других архитектур. И читать эту галиматью сложно, как ты уже убедился. Не делай так.
Good Luck,
UT
ИМХО если уж припёрло, то лучше так:
и, что не маловажно, сделать
во избежание.
факт
а вот и неправильно ;) Память бывает по разному организована, может быть что ch[3]==0xad, а может оказаться что и ch[0]==0xad. И, замечу, x86 использует второй способ, он ещё называеться big-endian — младший байт по младшему адресу. А про первый вариант (little-endian), я только слышал, и знать не знаю на хрена такие сложности нужны.
Надо смотреть на контекст, чтобы понять зачем он это делает (может просто проверяет endianess машины)
Да, согласен, на x86 будет ch[0]==0xad
Только и ты ошибся — младший байт по младшему адресу называется little-endian, каковым и является x86,,, :-)
http://en.wikipedia.org/wiki/Endianness
Good Luck,
UT
действительно…
На самом деле big-endian не сложности, а естественное положение вещей. ИМХО. Т.е. это интуитивно понятное человеку явление. А вот little-endian было введено Intel потому, что раз биты в байте нумеруются справа налево, то и байты в слове должны так же располагаться.
может быть. но когда мозги свёрнуты x86 ассемлером, сложно себе представить как бороться с проблемами little-endian.