Михаил, добрый день!
Пытаюсь сделать простую формулу сдвига одного байта для получения номера бита, в котором 1. Байт получаю из GetByte.
Не могу применить тип Byte, только int либо UInt.
Вот такую конструкцию
public UInt64 BUKShift(UInt64 val)
{
UInt64 n = 0;
while (val > 0)
{
val = val >> 1;
++n;
}
return (UInt64)n;
}
компилятор понимает.
Но при вызове функции из входного канала BUKShift(Val(861)) ошибка компиляции:
2017-11-11 18:19:37 <WIN-3SO1IL7Q2GO><система><ERR> Ошибка при компилировании исходного кода формул:
Строка 674, колонка 57: error CS1502: Наиболее подходящий перегруженный метод для «Scada.Server.Svc.CalcEngine.BUKShift(ulong)» имеет несколько недопустимых аргументов
Строка 674, колонка 66: error CS1503: Аргумент «1»: преобразование типа из «double» в «ulong» невозможно
Понимаю, что проблема в преобразовании типов, но как сделать правильно — не знаю.
Просьба разъяснить правила работы с типами данных при использовании формул.