Что такое код booleansбулевы


Должен ли я использовать C (99) булевы? (Также с ++ булевы в C ++?)

Я не сделал много программирования C, но когда я делаю, когда нужно ложным я ставлю 0, когда я хочу, правда, я ставлю 1, (напр., В то время как (1)), в других случаях я использую такие вещи, как «в то время как (PTR)» или «если (х)».

Должен ли я попробовать использовать C99 булевы, я должен рекомендовать их другим, если я помогаю людям новые для программирования узнать основы C (мышление сСт 1 ?? студентов)?

Я довольно уверен, что Visual Studio компилятор поддерживает C99 Bools, но делать много проектов с открытым исходным кодом (и С приложениями в промышленности) составляет для c89? Если я не использую C Bools я должен по крайней мере, сделать что-то вроде #define TRUE, 1 #define FALSE 0?

Кроме того, что о C ++ Booleans (для C ++)?

В C ++ нет никаких причин , чтобы не использовать его. В C, я использую только int для выполнения этой задачи, без каких — либо #define или что — то в этом роде. Переменные-имена , как isDefinition достаточно ясно показывают , что происходит, на мой взгляд.

Конечно, нет ничего плохого в определении собственного BOOL или используя те из .

Да, вы должны использовать языковые абстракции, когда они доступны. Когда я использую старый C компилятор, я до сих пор создать некоторую абстракцию BOOL. Использование литералов в коде является очень плохой практикой.

Компилятор может сделать лучшую оптимизацию, когда он знает, что переменный является логическим значением. Кроме того, при использовании Интса легче ввести ошибки при использовании в контексте побитового как Интс может быть случайно установлен, отличными от 1 значений

Что такое код booleans/булевы

Логический тип представлен двумя постоянными значениями False и True . Значения используются для представления истинности.

Тип bool не позволяет наследоваться. Его единственные экземпляры — False и True .

Если рассматривать эти значения в числовом контексте (например, когда они используются как аргументы в арифметической операции), то ведут они себя как целые 0 и 1 соответственно.

Конструктор типа bool(x) может использоваться для приведения любого значения к логическому типу (если, конечно, это значение можно интерпретировать как логический тип). Если аргумент *x* ложь, или опущен вернётся False .

Блог GunSmoker-а (переводы)

. when altering one’s mind becomes as easy as programming a computer, what does it mean to be human.

среда, 8 апреля 2009 г.

BOOL, Boolean и Integer

Это перевод BOOL, Boolean and Integer. Автор: Christian Wimmer.

Кто-то может подумать, что типы BOOL и Boolean являются одним и тем же типом в Delphi, т.к. они могут содержать только true и false. Верно ведь? И да и нет. Они кажутся одинаковыми, но есть небольшая разница в трактовке этих типов при присваивании и сравнении. Чтобы увидеть разницу, нам нужно открыть окно CPU-отладчика и копнуть ассемблерный код. Не закрывайте страничку — это действительно не так сложно понять.

Вы также можете упаковать boolean-значение в integer. Фактически, заголовочники Windows определяют булевский тип именно так — так что мы посмотрим и на этот способ тоже.
Следующий ассемблерный код был снят с окна CPU в Delphi 7:

Integer
BOOL/LongBool
Boolean
Я не хочу философствовать о плохих или хороших сторонах этих строк. Главное тут в результате, который мы видим. Присваивание Integer и Boolean просто копирует единичку в переменную value. С другой стороны, присвоение для BOOL/LongBool выглядит иначе — и, фактически, с точностью до наоборот. Оно копирует значение $FFFFFFFF — что, очевидно, есть отрицательное значение для единицы. Так что результатом в переменной value будет -1. Вы можете проверить это с помощью следующего кода. Переменная i будет содержать отрицательное число.
Почему важно понимать эту разницу? Ну, некоторые функции Win32 API проверяют свои аргументы и могут возвращать ошибку 87 (неверный параметр) или (в худшем случае) весьма странно себя вести. Как вы увидели выше, каждый раз, когда значению типа BOOL присваивают true, Delphi устанавливает его в -1. Если функция Win32 API приводит тип аргумента к обычному integer, то она получит -1 ($ffffffff) и может провалиться, если она ожидает только 0 или 1.
Здесь история только начинается. Все заголовочники JEDI API (и стандартные заголовочники в Delphi — прим. пер.) используют тип BOOL, приводя его к Delphi-скому LongBool, который — как мы уже видели ранее — определяет значение “-1″ как true. В большинстве случаев функции Win32 API проверяют на равенство нулю — и тогда мы в порядке. Они сравнивают аргумент с нулём (false) — а в противном случае считают его true. Поскольку я не хочу брать на себя ответственность за столь кардинальные изменения — я решил оставить везде тип BOOL. Кроме того, изменение BOOL на Integer означало бы, что вы не сможете больше присваивать true и false, без необходимости приведения типа к BOOL (или Integer).

В итоге всё упирается в совместимость и удобство. Однако, с другой стороны вы должны помнить, что тип BOOL в Delphi может быть источником ошибки №87 (неверный аргумент).

Вывод:

X BOOL в Delphi BOOL в C Boolean в Delphi
обычный тип LongBool int магия компилятора
размер в байтах 4 4 1
false = ?
true = ? -1 ($FFFFFFFF) 1 1

Следующий список содержит функции, которые могут конфликтовать с различными объявлениями, потому что они проверяют значения аргумента. Если вы найдёте функцию, которая ведёт себя странно с аргументом типа BOOL — отправляйте её мне.

# Имя Заголовочный файл Примечание
1. QueryServiceConfig2(W/A) JwaWinSVC.pas Проблема с TServiceDelayedAutoStartInfo (VISTA)

Прим. пер.: разумеется, этот список больше, но в оригинальном посте в списке была всего одна функция. Проблемы, например, имеются у такой известной функции как CreateMutex. Посмотрите, как она реализована в Windows.pas. А может тут речь идёт только о полях BOOL в записях.

Решения, которые вы найдёте в JEDI API.
Вы можете найти различные решения этой проблемы в исходниках JEDI. Почему решений несколько? Потому что код был написан многими людьми, с разным уровнем знаний, и в различное время. Так что если вы увидите объявление записи (struct), которая использует объявление BOOL как в SERVICE_DELAYED_AUTO_START_INFO — вам нужно убедиться, что функция, которая использует аргументы такого типа, ведёт себя корректно.
И здесь может быть два возможных решения. ну или вы так думаете.
Первое объявление кажется корректным, но, как вы уже поняли, оно не всегда будет таким (например, оно не является верным для _SERVICE_DELAYED_AUTO_START_INFO в Vista). Второе может работать, но только благодаря случаю. Учтите, что тип BOOL в C имеет размер 4 байта (= sizeof(int)), а тип Boolean состоит только из одного. Получается, что мы обрезали у записи три байта. Поэтому целевая функция (здесь: ChangeServiceConfig2) “думает”, что поле записи fDelayedAutoStart состоит из 4-х байт (sizeof(int)) и читает три байта за структурой. Поскольку мы не знаем их содержания — они могут быть заполненными случайными данными. В результате получим число, которое не является ни нулём, ни +/-1. Т.к. ChangeServiceConfig2 может быть успешно выполнена только для 1 или 0, то мы получаем ошибку 87 (неверный аргумент).
Поэтому, на самом деле, здесь могут быть два таких решения:
Я предпочитаю второе решение и вам того же советую. Почему? Сначала вы можете подумать, что первый вариант — это идеальное решение, потому что вы можете просто присваивать true или false — прямо как в C. Однако, как я только что сказал, три байта в поле Pad тоже должны быть инициализированны. Поэтому правильный способ использования был бы таким:
Проблема в том, что это не будет работать. Почему? Многие Delphi-программисты, работающие напрямую с API, находят решения своих проблем в исходниках на C. Они просто переводят исходники слово-в-слово с C на Delphi, не разбираясь в деталях. А дело в том, что вы не найдёте вызова ZeroMemory в таком C коде! Программист C может просто присвоить полю fDelayedAutoStart TRUE и всё: проблемные три байта инициализируются в момент присваивания. Ну, не кажется ли вам теперь второе решение лучшим?
Именно по этой причине вы увидите в последних версиях JEDI API только такую запись:
Да, компилятор не даст присвоить значение true напрямую, но это лучшее решение, что пришло мне в голову.

Нет ничего лучше, чем просто работающий код.

Pro Java


Страницы

8 апр. 2015 г.

Примитивные типы Java — boolean

Тип boolean представляет значения истинности. Существует только два возможных значения для данного типа, представляющих два булевых состояния: включено или выключено, да или нет, истина или ложь. Java резервирует слова true и false для представления этих булевых значений они же являются и двумя допустимыми литералами для задания значений переменных типа boolean.

Илон Маск рекомендует:  Php удаление строки из файла

В Java существуют довольно строгие ограничения по отношению к типу boolean: значения типа boolean нельзя преобразовать ни в какой другой тип данных, и наоборот . В частности, boolean не является целым типом, а целые значения нельзя применять вместо булевых.

Помимо задания логического значения непосредственно через оператор присваивания переменной boolean, значения логического типа возникают в результате различных сравнений, вроде 2 > 3, и используются главным образом в условных операторах и операторах циклов.

Операторы сравнения

Операторы сравнения состоят из операторов равенства, которые проверяют равенство или неравенство значений (== , !=), и операторов отношения ( , =), используемых с упорядоченными типами (числами и символами) при проверке соотношения больше/меньше. Операторы обоих типов возвращают значение типа boolean, поэтому их обычно используют с условными операторами if и циклами while и for для выбора ветви или проверки условия выполнения цикла.

В Java предусмотрены следующие операторы равенства:

Равно (==)

Оператор == возвращает true (истина), если оба его операнда равны; если нет, то возвращается false (ложь).

В случае примитивных операндов он проверяет идентичность самих значений операндов, однако в случае операндов ссылочных типов проверяется, ссылаются ли операнды на один и тот же объект или массив . Другими словами, оператор не проверяет равенство двух разных объектов или массивов. По средством этого оператора не удастся проверить равенство двух различных строк .
Если оператор == сравнивает два числовых или символьных операнда различных типов, то до начала сравнения более узкий операнд преобразуется к типу более широкого . Например, при сравнении short и float величина типа short преобразуется во float до начала сравнения. Для чисел с плавающей точкой специальное отрицательное нулевое значение считается равным обычному положительному нулевому значению. Кроме того, специальное значение NaN (нечисловое) не равно ни одному другому числу, включая само себя. Чтобы проверить, является ли значение с плавающей точкой значением NaN, используйте метод Float.isNan() или Double.isNan() .

Не равно (!=)

Оператор != прямо противоположен оператору ==. Он возвращает true, если два примитивных операнда имеют разные значения либо если два ссылочных операнда относятся к различным объектам или массивам. В противном случае он возвращает false.

Операторы отношения можно использовать с числами и символами, но нельзя применять со значениями типа boolean, объектами или массивами , так как данные типы не упорядочены. В Java предусмотрены следующие операторы отношения:

Меньше ( Возвращает true, если первый операнд меньше второго.

Меньше или равно ( Возвращает true, если первый операнд меньше или равен второму.

Больше (>)
Возвращает true, если первый операнд больше второго.

Больше или равно (>=)
Возвращает true, если первый операнд больше или равен второму.

Булевы операторы

Как вы уже знаете, операторы сравнения сравнивают операнды и возвращают значение типа boolean. Величины такого типа часто используются в операторах ветвления и цикла. Чтобы выбор ветви и проверка цикла по условиям стали полезнее простого сравнения, можно задействовать булевы (или логические) операторы для объединения нескольких выражений сравнения в одно, более сложное выражение. Для логических операторов нужны операнды со значениями типа boolean. Эти операторы также возвращают значения типа boolean. Существуют такие логические операторы:

Условное И (&&)

Данный оператор выполняет логическую операцию И над операндами. Он возвращает true тогда и только тогда, когда оба операнда истинны . Если один или оба операнда ложны, он возвращает false . Например:

if ( x 3 ) // Если оба сравнения истинны

Данный оператор (и все другие логические операторы кроме унарного оператора ! ) имеет меньший приоритет, чем операторы сравнения . Таким образом, вышеприведенная запись кода вполне допустима. Однако некоторые программисты прибегают к помощи круглых скобок, чтобы явно обозначить порядок вычислений:

Следует выбрать тот стиль, который вы считаете более удобным для чтения.

Этот оператор называется условным И, потому что он не всегда оценивает второй операнд . Если первый операнд равен false, значение выражения также будет false, каким бы ни было значение второго операнда. Поэтому, для большей эффективности, интерпретатор Java пропускает анализ второго операнда. В выражениях с побочными эффектами этот оператор следует применять осторожно, так как нет гарантии, что будет вычислен второй операнд. С другой стороны, этот оператор позволяет писать такие выражения:


if ( data != null && i [ i ] != -1 ) .

Второе и третье сравнения в данном выражении могут привести к ошибкам, если первое или второе сравнение возвращают false. К счастью, это не проблема, так как поведение оператора && условно.

Условное ИЛИ (||)

Данный оператор выполняет логическую операцию ИЛИ на двух операндах типа boolean. Он возвращает true, если один или оба операнда истинны . Если оба операнда ложны, он возвращает false . Подобно оператору &&, оператор || не всегда вычисляет второй операнд. Если первый операнд равен true, значение выражения тоже будет true , каким бы ни было значение второго операнда. В этом случае оператор просто пропускает второй операнд.

Логическое НЕ (!)

Этот унарный оператор меняет boolean значение операнда. Он возвращает false, если применяется к true значению, и true, если задано false значение . Данный оператор можно использовать в таких выражениях:

if ( !found ) … // found является булевой переменной, объявленной где-то ранее

while ( !c.isEmpty ()) … // Метод isEmpty() возвращает булево значение

Так как оператор ! является унарным, он имеет высокий приоритет, и зачастую его нужно заключать в круглые скобки:

if ( ! ( x > y && y > z ))

Логическое И (&)

С операндами типа boolean поведение оператора & аналогично поведению оператора &&, но он всегда вычисляет оба операнда, каким бы ни было значение первого операнда. Однако данный оператор практически всегда используют с целыми числами как побитовый оператор.

Логическое ИЛИ (|)

Данный оператор выполняет логическую операцию ИЛИ над двумя операндами типа boolean. Он аналогичен оператору ||, но всегда вычисляет оба операнда, даже если первый операнд является true. Оператор | почти всегда используется как побитовый оператор для целых чисел, а с операндами типа boolean его применяют достаточно редко.

Логическое исключающее ИЛИ (^)

Для операндов типа boolean данный оператор вычисляет исключающее ИЛИ. Он возвращает true, если только один из двух операндов истинен . Другими словами, он возвращает false, если оба операнда ложны либо истинны . В отличие от операторов && и || он всегда вычисляет оба операнда. Оператор ^ намного чаще применяется как побитовый оператор для целых чисел. С операндами типа boolean поведение данного оператора аналогично поведению оператора !=.

Логический оператор присваивания И (&=)

Данные оператор совмещает две операции: логическое И и операцию присваивания. Сперва, над двумя операндами данного оператор совершается операция логического И, а затем происходит присвоение значения этой операции левому операнду.

Например запись x&=y, аналогична записи x=x&y.

Логический оператор присваивания ИЛИ (|=)

Данный оператор аналогичен оператору &=, но только перед присваиванием совершает операцию логического ИЛИ над операндами.

Например запись x|=y, аналогична записи x=x|y.

Логический оператор присваивания исключающее ИЛИ (^=)

Аналогично двум предыдущим, только перед присваиванием совершает над операндами операцию исключающего логического ИЛИ.

Например запись x^=y, аналогична записи x=x^y.

Результаты выполнения булевских логических операций можно представить таблицей:

Ну а теперь немного попрактикуемся на простой программке:


Данная программа выводит следующие значения:

В этой программе все просто и не нужно что-то объяснять дополнительно. Если что-то не понятно, то читаем еще раз матчасть. А вот для следующей программы нужно будет немного разъяснений.

Методы compare1 и compare2 сравнивают переданное им значение на то меньше оно семи или больше и возвращают соответствующий логический результат – true или false.

В строке 22 мы присваиваем boolean переменной a результат сравнения логическим И значения возвращаемые методами compare1 и compare2, которым были переданы значения 5 и 3 соответственно. В данном случаем compare1 вернет true, поскольку 5 меньше 7, а compare2 вернет false, поскольку 3 меньше 7. И в данном случае выполнятся оба метода – compare1 и compare2, потому что первый оператор условного И вернул true. Если бы он вернул false, то метод compare2 не выполнялся бы, что и происходит в 26 строке.

Условное ИЛИ уж разбирать не буду там все тоже самое с точностью до наоборот

Ну и теперь посмотрим на вывод этой программы:

Надеюсь, что все с этой темой понятно. Если нет, то внимательно вкуриваем мануал и медитируем… медитируем… медитируем…. омммммм…

Тип данных boolean

Ключевой момент: тип данных boolean объявляет переменную со значением true или false.

Реляционные операторы

Как бы вы сравнили два значения, на предмет, является ли радиус больше чем , равен или меньше чем ? Java представляет шесть реляционных операторов (также известных как операторы сравнения), показанных в таблице:

Оператор Java Математический символ Имя Пример (radius равен 5) Результат
> больше чем radius > 5 true
>= больше чем или равно radius >= 5 true
== = равно radius == 5 false
!= не равно radius != 5 true

Предупреждение: оператор проверки равенства представляет собой два знака равно (==), а не один знак равенства (=). Последний символ используется для присваивания.

Результат сравнения – это булева величина: true или false. Например, следующая инструкция отобразит true:

Булевы переменные

Переменные, которые содержат булево значение, известны как булевы переменные. Тип данных boolean используется для объявления булевых переменных. Переменная boolean может содержать одно из двух значений: true или false. Например, следующее выражение присваивает true переменной lightsOn:

true и false являются литералами, т.е. используются буквально, как есть, в точности как цифра, такая как 10. Они обрабатываются как зарезервированные слова и не могут использоваться как идентификаторы в программе.

Предположим, вы хотите написать программу для практики в начальном сложении. Программа генерирует два случайных односимвольных числа number1 и number2 и отображает студенту вопрос вроде «Сколько будет 8+5?», примерно так:

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

Имеется несколько способов сгенерировать случайные числа. На данный момент сгенерируйте первое число используя System.currentTimeMillis() % 10, а второе число используя System.currentTimeMillis() / 7 % 10.

Строки 5-6 генерируют два числа, number1 и number2. Строка 14 получает ответ от пользователя. Ответ проверяется в троке 18 используя булевое выражение number1 + number2 == answer. Слово true означает «истина», «верно», слово false означает «ложь», «неверно».

Что такое код booleans/булевы

Файлы упражнения, которые сопровождают этот раздел: Download

1.3.5.1. БУЛЕВЫЕ ЗНАЧЕНИЯ

Числовые переменные могут хранить целый ряд различных чисел. Булевые переменные могут хранить только два значения, обозначаемые как Да или Нет, Правда или Ложь, 1 или 0. Очевидно, мы никогда не сможем использовать булевые значения для выполнения расчетов из-за их ограниченного диапазона. Мы можем использовать булевые значения для определения условий.

В Grasshopper, Boolean могут использоваться несколькими способами. Параметр Boolean — это контейнер для одного или нескольких булевых значений, в то время как Boolean Toggle позволяет быстро изменить значение правды или лжи как входов.


Boolean Toggle — дважды кликните по переключателю булевых значений для изменения значения правда или ложь

Grasshopper также содержит объекты, которые проверяют условие и результат булевых значений. Например, компонент Includes позволяет проверить числовое значение на то, включено ли оно в диапазон.

Компонент Includes проверяет включено ли число 6.8 в диапазон 0 — 10. Возвращается булевое значение Правда.

1.3.5.2. ЛОГИЧЕСКИЕ ОПЕРАТОРЫ

Логические операторы, в своем большинстве, работают с булевыми значениями и очень логичны. Как вы помните, булевые значения могут иметь только два значения. Булевая математика была разработана Джорджом Буле (1815-1864) и сегодня она является ядром всей цифровой индустрии. Булевая алгебра дает нам инструменты анализа, сравнения и описания наборов данных. Хотя Буле изначально определил шесть операторов булевых значений, мы обсудим только три из них:

Оператор Nor немного выделяется среди других операторов, потому что ему не требуются два значения. Вместо этого, он просто преобразует одно значение в правильное. Представьте, у вас есть скрипт, который проверяет существование набора Блок определений в Rhino. Если Блок определение не существует, мы хотим проинформировать пользователя и прервать скрипт.

And и Or требуют наличие двух аргументов с обеих сторон. Оператору And требуются два аргумента True, чтобы определить значение как True. Оператору Or достаточно одного значения True.

Как видите, сложность в работе с логическими операторами не в теории, а в том, что происходит, когда вам требуется их большое количество для оценки чего-либо. Использование их вместе быстро приводит к запутанности, не говоря уже о проблемах с приоритетом операторов.

Хороший способ поработать над вашей булевой логикой — это использовать диаграммы Venn. Диаграмма Venn — это графическое представление наборов булевых значений, где каждый диапазон содержит (под)набор значений, которые обладают общими характеристиками. Самая известная из них — это диаграмма из трех кругов:

Boolean (Булев, Логический тип данных)

Boolean (Булев, Логический тип данных) — примитивный тип данных в информатике, которые могут принимать два возможных значения, иногда называемых истиной ( true ) и ложью ( false ). Например, в JavaScript Булевы состояния часто используются для того, чтобы определить какие части кода выполнять (например, в операторах if) или повторять (например, циклы for).

Ниже приведен некоторый псевдокод JavaScript (это не действительно исполняемый код), демонстрирующий эту концепцию.

Булевы значения названы в честь английского математика George Boole, который был первопроходцем в области математической логики.

Булев тип данных

Читайте также:

  1. CHAR и VARCHAR2 — символьные типы данных Огасlе
  2. CRM – технологии и интеллектуальный анализ данных в управлении маркетингом.
  3. FPU предоставляет восемь регистров для хранения данных и пять вспомогательных регистров.
  4. RI +/- коррекция данных финансовой отчетности
  5. X. Логические основы ЭВМ. Кодирование данных в ЭВМ
  6. А. Функции для оценки разброса данных.
  7. Абстрактные структуры данных.
  8. Аварии на взрывоопасных и пожароопасных объектах, очаги поражения при данных авариях
  9. Автоматизация учета данных путевых листов малого АТП
  10. Автоматизированные банки данных
  11. АВТОМАТИЗИРОВАННЫЕ ИНФОРМАЦИОННЫЕ СИСТЕМЫ ДЛЯ КАМЕРАЛЬНОЙ ОБРАБОТКИ ТОПОГРАФО-ГЕОДЕЗИЧЕСКИХ ДАННЫХ
  12. Администратор базы данных и его функции

Логический тип

Значениями логического типа BOOL может быть одна из предварительно объявленных констант false (ложь) или true (истина).

Данные логического типа занимают один байт памяти. При этом значению false соответствует нулевое значение байта, а значению true соответствует любое ненулевое значение байта.

false всегда в машинном представлении: 00000000;

true может выглядеть таким образом: 00000001 или 00010001 или 10000000.

Однако следует иметь в виду, что при выполнении операции присваивания переменной логического типа значения true в соответствующее поле памяти всегда записывается код 00000001.

Над логическими типами возможны операции булевой алгебры — НЕ (!), ИЛИ ( || ), И ( && ), исключающее ИЛИ ( ^ ) — последняя реализована для логического типа не во всех языках. В этих операциях операнды логического типа рассматриваются как единое целое — вне зависимости от битового состава их внутреннего представления.

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

Интересно, что в языке C данные логического типа отсутствуют, их функции выполняют данные числовых типов, чаще всего — типа int. В логических выражениях операнд любого числового типа, имеющий нулевое значение, рассматривается как «ложь», а ненулевое — как «истина». Результатами логического типа являются целые числа 0 (ложь) или 1 (истина). В С++ появился логический тип BOOL, но его ввели исключительно для удобства программирования, и он ни как не влияет на возможность использования других типов в логических выражениях как в С.

Для булева типа данных, bool, в С# определены два значения true и false (истина и ложь). Следовательно, переменная типа bool или логическое выражение будут иметь одно из этих двух значений. Более того, не существует способа преобразования значений типа bool в целочисленные значения. Например, значение 1 не преобразуется в значение true, а значение 0 — в значение false.

Приведем программу, демонстрирующую использование типа данных bool.


// Программа демонстрирует использование
// переменной, имеющей тип bool.

class BoolDemo <
public static void Main() <
bool b;

b = false;
Console.WriteLine(«Переменная b имеет значение » + b);
b = true;
Console.WriteLine(«Переменная b имеет значение » + b);

// Булева переменная может управлять условным оператором if.
if(b) Console.WriteLine(«Этот оператор будет выполнен.»);
Булева переменная может управлять условным оператором if.

b = false;
if(b) Console.WriteLine(«Этот оператор не будет выполнен.»);
// Условный оператор возвращает булево значение.
Console.WriteLine(«(10 > 9)-это » + (10 > 9));
>
>

Ниже представлен результат, сгенерированный этой программой:

Переменная b имеет значение False
Переменная b имеет значение True
Этот оператор будет выполнен.
(10 > 9) — это True

Обратите внимание на некоторые особенности использования булевой переменной. Во-первых, при выводе значения типа bool с помощью метода WriteLine() на экран выводится слово true или false. Во-вторых, используя переменную типа bool, можно управлять оператором if. Если условием выполнения оператора if является истинность переменной (в данной программе переменной b), то нет необходимости записывать оператор if так:

достаточно более короткого выражения:

В-третьих, результатом выполнения оператора сравнения, такого как 9 выводит на экран значение true. Далее, дополнительная пара скобок, в которые заключено выражение 10 > 9, является необходимой, поскольку оператор + имеет больший приоритет, чем оператор >.

Операторы сравнения и логические операторы В терминах оператор сравнения и логический оператор слово сравнение означает оценку одного значения по сравнению с другим, а слово логический — способ, которым можно связать значения true и false (истина и ложь) в выражении. Поскольку результатом выполнения операторов сравнения являются булевы значения, эти операторы часто работают совместно с логическими операторами. Поэтому их можно рассматривать вместе.

Ниже представлены операторы сравнения.

Оператор Значение
== Равно
!= Не равно
> Больше чем
= Больше или равно
, = применимы только к перечисляемым типам данных, которые упорядочены в своей структуре (например, упорядоченная структура чисел 1, 2, 3 и так далее или упорядоченные символы букв алфавита). Следовательно, все операторы сравнения могут применяться ко всем числовым типам данных. Однако значения типа bool могут сравниваться только на предмет равенства или неравенства, поскольку значения true и false не упорядочены. Например, выражение true > false в языке C# не имеет смысла.

Для логических операторов операнды должны иметь тип bool. Результатом логических операций также являются значения, имеющие тип bool. Логические операторы &, |, ^ и! поддерживают базовые логические операции AND, OR, XOR и NOT соответственно, результаты выполнения которых соответствуют значениям, приведенным в следующей таблице истинности.

p q p & q p q p ^ q
false false false false false true
true false false true true false
false true false true true true
true true true true false false

Например, из таблицы видно, что результатом выполнения оператора XOR будет значение true, если только один его операнд имеет значение true.

Рассмотрим программу, в которой демонстрируется несколько операторов сравнения и логических операторов:

// В программе демонстрируется использование логических операторов
// и операторов сравнения.

class RelLogOps <
public static void Main() <
int i, j;
bool b1, b2;

i = 10;
j = 11;
if(i = j) Console.WriteLine(«Эта строка не будет выведена.»);
if(i > j) Console.WriteLine(«Эта строка не будет выведена.»);

b1 = true;
b2 = false;
if(b1 & b2) Console.WriteLine(«Эта строка не будет выведена.»);
if(!(b1 & b2)) Console.WriteLine(«Результатом вычисления»+
» выражения !(b1 & b2) будет значение true.»);
if(b1 | b2) Console.WriteLine(«Результатом вычисления»+
» выражения b1 | b2 будет значение true.»);
if(b1 ^ b2) Console.WriteLine(«Результатом вычисления»+
» выражения b1 ^ b2 будет значение true.»);
>
>

Результат выполнения программы следующий:

Дата добавления: 2014-01-07 ; Просмотров: 1039 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Сделайте функцию универсальной для List и boolean []

У меня есть две функции, которые проверяют, являются ли все элементы массива или списка true . У меня проблемы с этим. Как я могу превратить функции в одну общую Java-функцию.

4 ответа


Если вы используете Guava, вы можете обернуть булевский массив в Booleans.asList() и передать его как список:

Вы можете просто принять объект

а затем проверьте instanceof boolean[] или instanceof List , а затем выполните другой код внутри метода.

Опять же, это не улучшение, но немного ближе к унификации кода

Общим предком для List и boolean[] является Object , поэтому, если вы не в порядке с allTrue(Object booleans) , вы не можете сделать это с помощью одного метода.

Если вы меняете сигнатуру метода на allTrue(Iterable booleans) , все, что вам нужно сделать, это создать специальный Iterator для перемещения булевского массива.

И, наконец, метод allTrue(boolean[] booleans) .

Я думаю, что ответ, данный @Joel, был хорошим, за исключением вопроса, указанного в комментарии. Если мы просто преобразуем boolean[] в boolean[] , мы можем попробовать следующее:

Что такое код booleans/булевы

Булевы операции с NURBS объектами

Прежде, чем начать команду, необходимо выделить первый или все объекты .

Булевы операции могут использоваться также с поверхностями и открытыми составными поверхностями . Результат зависит от направления нормалей объекта. Используйте команду Dir (Выбрать направление нормалей) для того, чтобы узнать направление нормалей . Если результаты противоположны Вашим пожеланиям, разверните направление поверхностей с помощью команд Dir (Выбрать направление нормалей) или Flip (Обратить направление) и попробуйте снова.

Попробуйте команду Join (Объединение) сначала на поверхностях.

BooleanDifference (Булево Вычитание)

Обрезает области выделенных составных поверхностей или поверхностей, занимаемые совместно с другим набором составных поверхностей или поверхностей .

Выделите первый набор объектов и нажмите Enter .

Выделите второй набор объектов и нажмите Enter .

Панель Инструментов Solid Tools (Инструменты Твердых Тел) > Boolean Difference (Булево Вычитание)

Меню Solid (Твердое Тело) > Difference (Вычитание)

BooleanIntersection (Булево Пересечение)

Обрезает области выделенных составных поверхностей или поверхностей, не занимаемые совместно с другим набором составных поверхностей или поверхностей .

Выделите первый набор объектов и нажмите Enter.

Выделите второй набор объектов и нажмите Enter.

Панель Инструментов Solid Tools (Инструменты Твердых Тел) > Boolean Intersection (Булево Пересечение)

Меню Solid (Твердое Тело) > Intersection (Пересечение)

BooleanUnion (Булево Объединение)


Используя выделенные поверхности или составные поверхности , создает единую составную поверхность из их областей, не занимаемых совместно. А из их областей, которые были заняты совместно, обрезаются части этих поверхностей или составных поверхностей .

Объекты объединяются в единую составную поверхность .

Панель Инструментов Solid Tools (Инструменты Твердых Тел) > Boolean Union (Булево Объединение)

Панель Инструментов Main2 (Основная 2) > Boolean Union (Булево Объединение)

Меню Solid (Твердое Тело) > Union (Объединение)

BooleanSplit (Булево Разбиение)

На базе выделенных поверхностей или (составных поверхностей) создает новые объекты (составные поверхности) следующим образом. Те области объектов, что оказались в совместно используемой части пространства сливаются воедино (что попало внутрь этого единого объекта обрезается), затем по границам взаимного проникновения объектов друг в друга, этот единый объект разбивается на отдельные составные поверхности .

Выделите первый набор объектов и нажмите Enter .

Выделите обрезаемые объекты и нажмите Enter .

Примечание: Обрезающие объекты и разбиваемые объекты могут быть одним и тем же .

Панель Инструментов Solid Tools (Инструменты Твердых Тел) > Boolean Split (Булево Разбиение)

Меню Solid (Твердое Тело) > Boolean Split (Булево Разбиение)

Boolean2Objects (Булевы Операции с Двумя Объектами)

Перебирает через щелчки мышью возможные Булевы Операции (Union (Объединение), Intersection (Пересечение), Difference A_Minus_B (Вычитание А_Минус_В) и B_Minus_A (В_Минус_А), и Inverse (Оставить только пересечение)) с двумя объектами .

Щелкайте мышью в окне вида, пока не получите желаемый объект .

Панель Инструментов Solid Tools (Инструменты Твердых Тел) > Boolean 2 Objects Булевы Операции с Двумя Объектами) (Щелчок правой кнопкой мыши)

Меню Solid (Твердое Тело) > Boolean Two Objects (Булевы Операции с Двумя Объектами)

Mesh Booleans (Булевы Операции с Полигональными Сетками)

Шаги те же, что и с Булевыми эквивалентами NURBS .

Примечание: Результат команды всегда — сетка из полигонов, независимо от исходного типа объекта .

MeshBooleanDifference (Полигональное Булево Вычитание)

Обрезает области выделенных полигональных сеток , составных поверхностей , или поверхностей, занимаемые совместно с другим набором сеток из полигонов, составных поверхностей или поверхностей .

Панель Инструментов Mesh Booleans (Булевы Операции с Сетками из Полигонов) > Mesh Boolean Difference (Полигональное Булево Вычитание)

Меню Mesh (Полигональная Сетка) > Mesh Boolean (Булевы Операции с Сетками из Полигонов) > Difference (Вычитание)

MeshBooleanIntersection (Булево Пересечение для Полигональных Сеток)

Обрезает области выделенных полигональных сеток , составных поверхностей , или поверхностей, не занимаемые совместно с другим набором полигональных сеток, составных поверхностей или поверхностей .

Панель Инструментов Mesh Booleans (Булевы Операции с Сетками из Полигонов) > Mesh Boolean Intersection (Булево Пересечение для Сеток из Полигонов)


Меню Mesh (Полигональные Сетки) > Mesh Boolean (Булевы Операции с Сетками из Полигонов) > Intersection (Пересечение)

MeshBooleanUnion (Булево Объединение для Полигональных Сеток)

Используя выделенные полигональные сетки, поверхности или , составные поверхности , создает единую полигональную сетку из их областей, не занимаемых совместно. А из их областей, которые были заняты совместно, обрезаются части этих полигональных сеток, поверхностей или составных поверхностей .

Панель Инструментов Mesh (Полигональная Сетка) > Mesh Boolean Union (Булево Объединение для Сеток из Полигонов)

Панель Инструментов Mesh Booleans (Булевы Операции с Сетками из Полигонов) > Mesh Boolean Union (Булево Объединение для Сеток из Полигонов)

Меню Mesh (Полигональные Сетки) > Mesh Boolean (Булевы Операции с Сетками из Полигонов) > Union (Объединение)

MeshBooleanSplit (Булево Разбиение для Полигональных Сеток)

На базе выделенных полигональных сеток, поверхностей или составных поверхностей , создает новые объекты (полигональные сетки) следующим образом. Те области объектов, что оказались в совместно используемой части пространства сливаются воедино (что попало внутрь этого единого объекта обрезается), затем по границам взаимного проникновения объектов друг в друга, этот единый объект разбивается на отдельные полигональные сетки .

Панель Инструментов Mesh Booleans (Булевы Операции с Сетками из Полигонов) > Mesh Boolean Split (Булево Пересечение для Сеток из Полигонов)

Меню Mesh (Полигональные Сетки) > Mesh Boolean (Булевы Операции с Сетками из Полигонов) > Boolean Split (Булево Пересечение)

Поиск причин проблем при булевых операциях

Булевы операции могут пройти со сбоем по ряду причин :

Нормалям не указано нужное направление .

Контрольные точки имеют тенденцию совмещаться в месте пересечения двух объектов .

Объекты могут иметь перекрываемые друг другом области поверхности.

Нормали Поверхности

Булевы операции используют нормаль поверхности, чтобы определить, какие части сохранить а какие отбросить. Когда Вы делаете попытку Булева Вычитания, а получаете результат Булева Объединения, или наоборот, это получается потому что у объектов есть нормали, которые имеют противоположное ожидаемому направление .

Булевы операции, как правило, не работают, если объекты имеют области поверхностей, перекрывающих друг друга, или только касаются один другого в отдельных местах или вдоль краев . Для успешного использования Булевых операций, объекты должны не задевать друг друга по касательной, а проникать друг в друга основательно .

Совмещение контрольных точек

Совмещение контрольных точек происходит, когда контрольные точки на краю поверхности совпадают по местоположению . В Rhino это происходит естественным образом на кончике конуса, трехсторонней плоскости или полюсе сферы . Вы также можете перемещать контрольные точки в то же самое положение. Такая точка называется также сингулярностью .

Когда точка сингулярности возникает на пересечении двух объектов, а Вы хотите произвести с ними Булевы операции, операция может оказаться невозможной .

Перекрываемые друг другом Области Поверхности

Наложение одной поверхности на другую происходит, когда две поверхности размещаются в одной и той же области одной и той же плоскости. В этом примере два параллелепипеда только касаются друг друга вдоль одной стороны. С этими объектами возможна Булева операция Union (Объединение) , но Difference (Вычитание) , и Intersection (Пересечение) работать не будут.

Что делать

Если Ваши объекты не примут нужный Вам вид при помощи Булевых операций, используйте другие методы, чтобы достичь желаемого результата .

В этом примере вершина конуса точно в углу коробки. Это — одна из ситуаций, которые могут заставить Булевы операции терпеть неудачу .

Вместо того, чтобы использовать Булевы операции в этом случае, используйте команду Explode (Разорвать) , чтобы разделить составные поверхности на отдельные поверхности, если необходимо . Используйте команду Intersect (Пересечение) , чтобы создать кривые, которые представляют пересечение двух поверхностей. Чтобы создать части, используйте эти кривые, чтобы Trim (Обрезать) и/или Split (Разбить) и Join (Объединить) снова вместе.

Илон Маск рекомендует:  Что такое код hw_gettext
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL