Если у меня есть переменная c_int8_t
в Фортране и я хочу интерпретировать базовые биты как целое число без знака (для индексации, а не для любой арифметики), каков наиболее эффективный способ выполнить преобразование? Я хочу сделать что-то вроде
X( some_function( my_c_int8_t_var ) ) = 1
где X — массив, а some_function
должен возвращать c_int16_t, содержащий беззнаковое значение my_c_int8_t_var
. Я видел варианты, включая перенос, iadd (или, я думаю, простое условное выражение с приведением и добавлением), но я хотел бы знать, что будет наиболее эффективным способом (это индексирование происходит во внутреннем цикле). Конечно, это не обязательно должна быть функция — если это можно сделать с помощью встроенного выражения, было бы здорово.
РЕДАКТИРОВАТЬ: Было бы неплохо, если бы этот подход также работал для другого целочисленного размера... то есть для получения содержимого беззнакового c_int16_t в c_int32_t и получения беззнакового c_int32_t в c_int64_t.
X
, используя полный диапазон целого числа со знаком, например.integer, dimension(-huge(my_c_int8_t_var) : huge(my_c_int8_t_var)) :: X
? Это было бы намного меньше хлопот. - person sigma   schedule 16.11.2012