C/C++

Можно ли через функцию memset записать число в элемент массива больше чем 255? (Си)

Функция memset записывает информацию побайтно, по порядку в каждый Байт одно и то же число. memset(arr, 2, 4); Это запишет цифру 2 в 4 Байта по порядку.
(В каждом байте будет цифра 2)
1 Байт может содержать число до 255.

Возможно ли в элемент массива записать число больше чем 255?
Если сделать так memset(arr,256, 1); то Первый элемент массива обнуляется.
Или с помощью memset можно только до 255 сохранять цифры в целочисленный массив?
memset работает только с байтами, байт имеет значение от 0 до 255. Для массивов типов short, long, double и т. п. нужно писать заполнение в цикле
Никита Быцко
Никита Быцко
69 419
Лучший ответ
Илья Амелин Как записать число 256 через memset?
Илья Амелин Вот так:
memset(arr,1, 2);
memset(arr,0, 1);
Можно и так:
memset(arr,0, 1);
memset(((char)arr)+1,1, 1);
Илья Амелин В итоге получится это 0000000100000000
Что равняется 256
Илья Амелин Точнее так:
memset(arr,1, 2); устанавливаем в 2 Байта цифру 1
00000001 00000001
memset(arr,0, 1); И перезаписываем первый Байт нулём.
Получается 00000000 00000001
Можно, но не любое.
Например

int rest[2] = {0,0};
memset(rest, 0xEFh);

присвоит всем элементам 4025479151
Игорь Sid
Игорь Sid
54 169
memset прекрасно подходит для инициализации нулями числового массива большого размера в целях повышения производительности. В цикле присваивать нули сто миллионов раз накладно. memset эту операцию выполнит в один приём. Применение для других целей возможно, но вряд ли вам когда-нибудь потребуется присвоить число тринадцать сто миллионов раз подряд.
Если очень захотеть, то можно ...

gcc под linux:
Simon Val
Simon Val
30 155
Илья Амелин Попробуйте число 256 или 258 например теперь)
Рабоатет только с 257) Фокус
Илья Амелин Когда 257 пытается записаться в Байт, это число превращается в 1
Это 00000001 в бинарном виде
В двух Байтах 257 Будет выглядеть так 00000001 00000001
Это то же самое что и число 257
0000000100000001
01 00
unsigned int 4 байта для 32 битных систем, значит FF FF FF FF максимальное число целочисленное
Денис Гармаш
Денис Гармаш
21 700
Денис Гармаш иногда можно взять четыре байта из одной переменной инт и переслать в другой инт. Только зачем?
Илья Амелин С помощью memset взять 4 РАЗНЫХ Байта и переслать в другой инт? Это как?
255 - это не ограничение memset, а самого байта. Байт - 8 бит. Это дает 2^8 = 256 различных вариантов. Следовательно, максимальное значение, которое можно сохранить в 1 байт - это 255 (0 - тоже число).
Целочисленный массив - это массив элементов типа int. int - обычно либо 2 (на старых (очень) пк), либо 4 байта. В 4 байта можно сохранить 2^(4*8) = 4 294 967 295 различных значений.
Т. к. число знаковое (не unsigned), то значения которые можно сохранить в int это [−2 147 483 648, +2 147 483 647]

memset устанавливает значение каждого байта, а не элемента массива, поэтому memset(arr,256, 1); - устанавливает значение одного БАЙТА в 256, а т. к. 256 - больше 255, то происходит целочисленное переполнение и байт принимает значение 0.

Если ты хочешь установить значение элементов массива, то это проще всего сделать в цикле, да и читать такой код будет проще.
Илья Амелин То же самое я описал в своём посте. Мой вопрос сводится к тому: как записать число 256 через memset?
Илья Амелин Я подобное предполагал. Кароче это нерационально и наверное так не делают?
Илья Амелин Изучал просто как memset работает.
да можно
Илья Амелин Как записать число 256 через memset?
Илья Амелин это какой язык?