В следующем фрагменте кода (я немного его изменил) предположим, что row
равно 15 .Вопрос в том, ссылается ли &data[row >> 6]
на адрес вне его номинального значения?
uint64_t volatile *data;
int numRows = 45;
numWords = (numRows + 63) >> 6;
data= new uint64_t[numWords];
memset((void*)data, 0, sizeof(uint64_t) * numWords);
int row = 15;
uint64_t bit = 1LL << (row & 63);
Or64(&data[row >> 6], bit);
Запуск измененного кода Я заметил, что &data[1]
указывает на начальный адрес + 8 , &data[2]
начальный адрес + 16 и так далее.
Итак, если начальный адрес переменной данных (длина 64 бита) равен 0x00000001, где референ &data[row >> 6]
должен указывать на?
Предполагается, что приведенный выше код изменяет некоторые биты внутри переменной данных,как это объяснить?