Я новичок сдвига битов, но я пытаюсь отлаживать следующий фрагмент кода:C++ сдвига битов
if (!(strcmp(arr[i].GetValType(), "f64")))
{
dem_content_buff[BytFldPos] = tmp_data;
dem_content_buff[BytFldPos + 1] = tmp_data >> 8;
dem_content_buff[BytFldPos + 2] = tmp_data >> 16;
dem_content_buff[BytFldPos + 3] = tmp_data >> 24;
dem_content_buff[BytFldPos + 4] = tmp_data >> 32;
dem_content_buff[BytFldPos + 5] = tmp_data >> 40;
dem_content_buff[BytFldPos + 6] = tmp_data >> 48;
dem_content_buff[BytFldPos + 7] = tmp_data >> 56;
}
Я получаю предупреждение о том, линии с «32» до «56» имеют счет сдвига это слишком велико. «F64» в предикате просто означает, что данные должны быть 64-битными данными.
Как это сделать?
редактировать:.
я должен положить больше кода в
tmp_data = simulated_data[index_data];
if (!(strcmp(dems[i].GetValType(), "s32")))
{ dem_content_buff [BytFldPos] = tmp_data; dem_content_buff [BytFldPos + 1] = tmp_data >> 8; dem_content_buff [BytFldPos + 2] = tmp_data >> 16; dem_content_buff [BytFldPos + 3] = tmp_data >> 24;
}
, если ((STRCMP (Демс [I] .GetValType(), "F64"))!) { dem_content_buff [BytFldPos] = tmp_data; dem_content_buff [BytFldPos + 1] = tmp_data >> 8; dem_content_buff [BytFldPos + 2] = tmp_data >> 16; dem_content_buff [BytFldPos + 3] = tmp_data >> 24; dem_content_buff [BytFldPos + 4] = tmp_data >> 32; dem_content_buff [BytFldPos + 5] = tmp_data >> 40; dem_content_buff [BytFldPos + 6] = tmp_data >> 48; dem_content_buff [BytFldPos + 7] = tmp_data >> 56; }
Таким образом, dem_content_buff
прямо сейчас используется только в тс. Могу ли я использовать этот массив для 64-битных данных?
Какой тип 'tmp_data'? Вероятно, вы захотите, чтобы это был 64-разрядный тип. –