Как порядок следования битов влияет на битовые сдвиги и файловый ввод-вывод в C?

Пусть L и B - две машины. L упорядочивает свои биты из LSB (Наименьший значащий бит) в MSB (старший значащий бит), а порядок B от MSB к LSB. Или, другими словами, L использует Little Endian, а B использует Big Endian бит - не путать с порядком байтов.

Проблема 1 РЕШЕНА :

Мы пишем следующий код, который мы хотим быть переносимыми:

#include <stdio.h>

int main()
{
    unsigned char a = 1;
    a <<= 1;

    printf("a = %d\n", (int) a);

    return 0;
}

на L , будет напечатано 2, но что произойдет на B ? Будет ли это сдвигать 1 и напечатайте 0?.

РЕШЕНИЕ: Определение C99 в 6.5.7 гласит, что, по крайней мере, на беззнаковые целочисленные типы, << и >> умножаются и делятся на 2 соответственно.

Проблема 2:

Мы пишем следующий код, который мы хотим сделать переносимым:

Программа READ:

/* program READ */
#include <stdio.h>

int main()
{
    FILE* fp;
    unsigned char a;

    fp = fopen("data.dat", "rb");
    fread(&a, 1, 1, fp);
    fclose(fp);

    return 0;
}

и программа WRITE:

/* program WRITE */
#include <stdio.h>

int main()
{
    FILE* fp;
    unsigned char a = 1;

    fp = fopen("data.dat", "wb");
    fwrite(&a, 1, 1, fp);
    fclose(fp);

    return 0;
}

что произойдет, если мы запустим WRITE на L , переместите файл данных в B и запустить ПРОЧИТАТЬ там? И если мы запустим ЗАПИСЬ на B , а затем ПРОЧИТАЕМ на L ?

Извините, если это FAQ. Я безуспешно гуглил часами.

6
задан Draemon 2 April 2011 в 01:21
поделиться