Если вы напишите значение в виде строки, оно займет не менее трех байтов для трех цифр; часто для перехода в конец значения часто используется символ новой строки или пробел.
Да, вы можете записать значение в 2 байта. Один из способов будет:
fwrite(&x, sizeof(x), 1, fp);
Разница между двоичным и текстовым заключается в том, что вы можете перемещать текст между различными типами машин практически безнаказанно, и все машины будут интерпретировать данные одинаково. Бинарный файл может быть интерпретирован только на машинах с тем же порядком байтов (с прямым порядком байтов или не-Intel против младшего или Intel). На другом классе машин вы должны поменять местами порядок байтов, чтобы двоичные данные интерпретировались правильно.