- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
#include <stdio.h>
#define BIG_ENDIAN 0
#define LITTLE_ENDIAN 1
int TestByteOrder() {
short int word = 0x0001;
char *b = (char *)&word;
return (b[0] ? LITTLE_ENDIAN : BIG_ENDIAN);
}
int main() {
int r = TestByteOrder();
printf("%s\n", r == LITTLE_ENDIAN ? "Little Endian" : "Big Endian");
return r;
}
Игрушечная программа, проверяет порядковость байтов процессора ("endianness"); хотя изначально понятно что WinNT всегда "от младшего к старшему".
Она безупречно правильная, но меня не устраивает ее размер. Ведь всё можно было бы уместить в две строки. (А еще лучше перевести на АСМ). Прошу знатоков поупражняться.
http://ideone.com/doXV49
Код не мой, я просто разместил объяву минифицировал.
Такой же неявный каст в выражениях pituh || kurochka, pituh && kurochka.
Бинарный оператор & — побитовое «И».
При беглом взгляде действительно можно спутать, что означает &i, если не заметить, что слева не число, а оператор приведения типа.
Напридумывают одинаковых значков...
А давайте проверим это утверждение. Новые версии существуют под Intel x86 и под ARM (Windows RT). Старые версии ещё были под MIPS, PowerPC, DEC Alpha AXP, Intel Itanium.
Процессоры MIPS, PowerPC, Alpha, Itanium, ARM могли работать в обоих режимах.
«OS/2 and Windows NT for PowerPC ran the processor in little-endian mode while Solaris, AIX and Linux ran in big endian». Хотя был и порт «Дебиана» для режима little-endian.
В Power PC 970, известном как G5, режим little-endian не реализовали.
Итак, Windows NT реализовали для процессоров, которые либо little-endian (x86), а также для процессоров, которые умеют работать в обоих режимах (у ARM ещё бывают смешанные режимы). Есть подозрение, что компания Microsoft для упрощения разработки на всех платформах использовала один и тот же порядок байтов.
Возможно, Вы правы, хотя официального подтверждения я не нашёл.
Кстати, исходник не привязан к Windows NT, его можно скомпилировать и под другие операционные системы.
Пользуюсь мобильными устройствами на ARM под управлением разных систем.
Пользуюсь устройствами на x86 под управлением Windows NT и иногда Linux.
Я не знаю, приходилось ли сталкиваться с чем-то ещё, потому что не знаю, из чего сделаны другие электронные устройства.
Под PDP-11 будет неправильно работать.
Именно поэтому я за "GCC". то гцц ругается а шлагнг молчит, хотя -Стена и -педантичные-ошибки.
мартышка так проверяет