Возвращает результат логической побитовой операции ИСКЛЮЧИТЕЛЬНОЕ ИЛИ (XOR) для заданной пары чисел.
Синтаксис
ПобитовоеИсключительноеИли(<Число1>, <Число2>)Полное описание, параметры и ограничения
Глобальный контекст.ПобитовоеИсключительноеИли (Global context.BitwiseXor)
Глобальный контекст (Global context)
ПобитовоеИсключительноеИли (BitwiseXor)
Доступен, начиная с версии 8.3.11.
Синтаксис:
ПобитовоеИсключительноеИли(<Число1>, <Число2>)
Параметры:
<Число1> (обязательный)
Тип: Число.
Первый операнд побитовой операции.
Значение должно быть целым числом в диапазоне от 0 до 2^32-1. Если число не целое или не укладывается в данный диапазон - генерируется исключение.
<Число2> (обязательный)
Тип: Число.
Второй операнд побитовой операции.
Значение должно быть целым числом в диапазоне от 0 до 2^32-1. Если число не целое или не укладывается в данный диапазон - генерируется исключение.
Возвращаемое значение:
Тип: Число.
Описание:
Возвращает результат логической побитовой операции ИСКЛЮЧИТЕЛЬНОЕ ИЛИ (XOR) для заданной пары чисел.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер, интеграция.
Использование в версии:
Доступен, начиная с версии 8.3.11.
Методическая информация
Практические примеры
Хранить учебные признаки товара в битовой маске
Бит 0 означает Активен, бит 1 — ЕстьФото, бит 2 — ЕстьОписание. Устанавливаем, проверяем и снимаем флаги на фиксированном числе.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Весь пример выполняется на числах, строках и двоичных данных, созданных в памяти. Реальные файлы, API и объекты базы не нужны.
Активен = 1;
ЕстьФото = 2;
ЕстьОписание = 4;
Флаги = ПобитовоеИли(Активен, ЕстьФото);
Флаги = УстановитьБит(Флаги, 2, Истина);
Сообщить(Флаги);
Сообщить(ПроверитьБит(Флаги, 0));
Сообщить(ПроверитьПоБитовойМаске(Флаги, ПобитовоеИли(ЕстьФото, ЕстьОписание)));
БезФото = УстановитьБит(Флаги, 1, Ложь);
БезФотоЧерезМаску = ПобитовоеИНе(Флаги, ЕстьФото);
Сообщить(БезФото = 5 И БезФото = БезФотоЧерезМаску);
Сообщить(ПобитовоеИ(БезФото, ЕстьФото) = 0);
ПереключённыйФото = ПобитовоеИсключительноеИли(БезФото, ЕстьФото);
Сообщить(ПереключённыйФото = 7);
Сообщить(ПобитовоеИсключительноеИли(ПереключённыйФото, ЕстьФото) = 5);
Сообщить(ПобитовоеНе(0) = 4294967295);
Сообщить(ПобитовоеИ(ПобитовоеНе(ЕстьФото), 7) = 5);Разбор по шагам
Номера битов начинаются с 0. Маска 1 соответствует биту 0, 2 — биту 1, 4 — биту 2.
Или объединяет флаги; ПроверитьБит проверяет один номер бита, ПроверитьПоБитовойМаске — наличие всех битов маски.
УстановитьБит возвращает новое число. Чтобы сохранить изменение, присваиваем результат; переменная не изменяется сама.
ИсключительноеИли переключает флаг, ИНе снимает биты маски. Не инвертирует все 32 бита, поэтому результат ограничиваем маской 7.
Как проверить результат
Первое сообщение 7; все последующие контрольные сравнения дают Истина.
После снятия Фото получается 5: активность и описание сохранились.
Повторное XOR-переключение тем же флагом возвращает исходное значение 5.
Ожидаемый результат
Освоены битовые операции на трёх явно определённых учебных признаках.
На что обратить внимание
Это не реальные значения статусов Avito и не система прав 1С: контракт признаков задан только для упражнения.
API принимает целые числа 0…4294967295 и номера битов 0…31; отрицательные числа и дроби не подходят.
ПобитовоеНе — не логическое Не для Булево. Инверсия числа затрагивает также старшие биты.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.