что делает минус перед скобкой в delphi

Рейтинг: 0Ответов: 1Опубликовано: 16.01.2023

есть переменная mask она типа cardinal, и при её присвоении происходит вот эта:

var Mask,Byte : cardinal;

Mask := -(Result and 1);

что значит минус перед скобкой? Если переменная не может быть меньше 0

Result получаем вот так:

  for Byte in TEncoding.ANSI.GetBytes(Text) do
  begin
    Result := Result xor Byte;

так что не думаю что там может быть минус, я в delphi не силён так что могу много чего не знать.

Ответы

▲ 2Принят

Типа Cardinal в Delphi это синоним типа unsigned int из C/C++. 4-байтовое беззнаковое целое.

(Result and 1) может иметь только два значения: 1 или 0.

Применение унарного минуса к 0 даст 0, то есть число 00000000 00000000 00000000 00000000b.

Применение унарного минуса к 1 даст -1, то есть число 11111111 11111111 11111111 11111111b.

В итоге вы получаете значение, у которого все биты соответствуют младшему биту значения Result.