код
- Войдите на сайт для отправки комментариев
Пт, 26/02/2016 - 11:43
void setbit(byte *data, byte n)
{
data[n/8]|=1<<(n%8);
}
помогите разобраться в коде
что значит символ *
вот этот момент тоже непонятен
data[n/8]|=1
Читать: http://people.toiit.sgu.ru/Sinelnikov/PT/C/Kern_Ritch.pdf
Там есть ответы на оба вопроса и много чего ещё.
Этот код может установить бит в любом месте массива из 32 байт. Звёздочка означает указатель, а тип со звёздочкой - типизированный указатель. byte * - это указатель на байт в ОЗУ, т.е. переменная должна содержать указатель на байт в ОЗУ (адрес). Когда к переменной подставляют квадратную скобку - это означает взять элемент массива. Дело в том, что в языке C и C++ работа с массивами и указателями тесно связана. Можно обращаться к элементу массива используя указатель или квадратные скобки. n/8 в данном случае - целочисленное деление на 8, означает, что каждые восемь значений n будут относиться к одному элементу массива, то есть одному очередному байту. При целочисленном делении остаток отбрасывается. Значения n от 0 до 7 будут относиться к нулевому элементу байтового массива. % - это взятие остатка от целочисленного деления, по смыслу здесь это номер бита в байте. Операция |= это сокращённая запись x = x | y - побитовая операция сложения. 1 << x побитовый сдвиг влево на x разрядов.
Поскольку в байте всего 256 значений, а адресация к элементу массива идёт через 8, то этот код может установить бит в одном из 32 байт. Другими словами можно установить бит в массиве из 256 бит.