Функция memset записывает информацию побайтно, по порядку в каждый Байт одно и то же число. memset(arr, 2, 4); Это запишет цифру 2 в 4 Байта по порядку.
(В каждом байте будет цифра 2)
1 Байт может содержать число до 255.
Возможно ли в элемент массива записать число больше чем 255?
Если сделать так memset(arr,256, 1); то Первый элемент массива обнуляется.
Или с помощью memset можно только до 255 сохранять цифры в целочисленный массив?
C/C++
Можно ли через функцию memset записать число в элемент массива больше чем 255? (Си)
memset работает только с байтами, байт имеет значение от 0 до 255. Для массивов типов short, long, double и т. п. нужно писать заполнение в цикле
Можно, но не любое.
Например
int rest[2] = {0,0};
memset(rest, 0xEFh);
присвоит всем элементам 4025479151
Например
int rest[2] = {0,0};
memset(rest, 0xEFh);
присвоит всем элементам 4025479151
memset прекрасно подходит для инициализации нулями числового массива большого размера в целях повышения производительности. В цикле присваивать нули сто миллионов раз накладно. memset эту операцию выполнит в один приём. Применение для других целей возможно, но вряд ли вам когда-нибудь потребуется присвоить число тринадцать сто миллионов раз подряд.
Если очень захотеть, то можно ...
gcc под linux:

gcc под linux:

Илья Амелин
Попробуйте число 256 или 258 например теперь)
Рабоатет только с 257) Фокус
Рабоатет только с 257) Фокус
Илья Амелин
Когда 257 пытается записаться в Байт, это число превращается в 1
Это 00000001 в бинарном виде
В двух Байтах 257 Будет выглядеть так 00000001 00000001
Это то же самое что и число 257
0000000100000001
Это 00000001 в бинарном виде
В двух Байтах 257 Будет выглядеть так 00000001 00000001
Это то же самое что и число 257
0000000100000001
01 00
unsigned int 4 байта для 32 битных систем, значит FF FF FF FF максимальное число целочисленное
unsigned int 4 байта для 32 битных систем, значит FF FF FF FF максимальное число целочисленное
Денис Гармаш
иногда можно взять четыре байта из одной переменной инт и переслать в другой инт. Только зачем?
Илья Амелин
С помощью 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.
Если ты хочешь установить значение элементов массива, то это проще всего сделать в цикле, да и читать такой код будет проще.
Целочисленный массив - это массив элементов типа 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 работает.
да можно
Похожие вопросы
- Создать одномерный массив, состоящий из n вещественных элементов. Элементы массива определить при помощи случайных чисел
- Упорядочить элементы массива по возрастанию на языке Си
- Заменить нулями элементы массива, которые расположены между первым минимальным и последним максимальным элементами масси
- Помогите добавить ввод чисел в массив матрицы на языке Си
- Найти произведение элементов массива а, состоящего из 25 целых чисел, кратных 2 на Паскаль
- Язык Си. Сортировка и поиск элементов массива
- В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива
- Вычислить произведение нечетных элементов массива В с++
- Сортировка элементов массива методом Шелла
- Копирование бит из массива в массив не используя memcpy. (Си)
memset(arr,1, 2);
memset(arr,0, 1);
Можно и так:
memset(arr,0, 1);
memset(((char)arr)+1,1, 1);
Что равняется 256
memset(arr,1, 2); устанавливаем в 2 Байта цифру 1
00000001 00000001
memset(arr,0, 1); И перезаписываем первый Байт нулём.
Получается 00000000 00000001