Надеюсь, result вначале инициализируется нулём и обладает ёмкостью больше 16 бит (или беззнаковый)?
А вообще, по памяти, операция сдвига работает только с константами т.е. нельзя писать << i. Можно переделать так:
for (iterator = 0; iterator < 16; iterator++){
result = result<<1;
if(state[iterator] > 0) result++;
ну или ++ замени на "ИЛИ" с единицей. Можно даже делать "или" сразу со state[iterator]. Или заменить сдвиг умножением каунтера на 2 на каждой итерации (нужна отдельная переменная) и плюсовать его.