File: Element_002dby_002delement-Boolean-Operators.html

package info (click to toggle)
octave 3.6.2-5%2Bdeb7u1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 71,636 kB
  • sloc: cpp: 241,186; fortran: 23,651; sh: 14,790; ansic: 7,153; lex: 3,761; objc: 3,404; yacc: 3,386; makefile: 2,073; awk: 985; perl: 838
file content (151 lines) | stat: -rw-r--r-- 7,675 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<html lang="en">
<head>
<title>Element-by-element Boolean Operators - GNU Octave</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="GNU Octave">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Boolean-Expressions.html#Boolean-Expressions" title="Boolean Expressions">
<link rel="next" href="Short_002dcircuit-Boolean-Operators.html#Short_002dcircuit-Boolean-Operators" title="Short-circuit Boolean Operators">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
  pre.display { font-family:inherit }
  pre.format  { font-family:inherit }
  pre.smalldisplay { font-family:inherit; font-size:smaller }
  pre.smallformat  { font-family:inherit; font-size:smaller }
  pre.smallexample { font-size:smaller }
  pre.smalllisp    { font-size:smaller }
  span.sc    { font-variant:small-caps }
  span.roman { font-family:serif; font-weight:normal; } 
  span.sansserif { font-family:sans-serif; font-weight:normal; } 
--></style>
</head>
<body>
<div class="node">
<a name="Element-by-element-Boolean-Operators"></a>
<a name="Element_002dby_002delement-Boolean-Operators"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Short_002dcircuit-Boolean-Operators.html#Short_002dcircuit-Boolean-Operators">Short-circuit Boolean Operators</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Boolean-Expressions.html#Boolean-Expressions">Boolean Expressions</a>
<hr>
</div>

<h4 class="subsection">8.5.1 Element-by-element Boolean Operators</h4>

<p><a name="index-element_002dby_002delement-evaluation-638"></a>
An <dfn>element-by-element boolean expression</dfn> is a combination of
comparison expressions using the boolean
operators &ldquo;or&rdquo; (&lsquo;<samp><span class="samp">|</span></samp>&rsquo;), &ldquo;and&rdquo; (&lsquo;<samp><span class="samp">&amp;</span></samp>&rsquo;), and &ldquo;not&rdquo; (&lsquo;<samp><span class="samp">!</span></samp>&rsquo;),
along with parentheses to control nesting.  The truth of the boolean
expression is computed by combining the truth values of the
corresponding elements of the component expressions.  A value is
considered to be false if it is zero, and true otherwise.

   <p>Element-by-element boolean expressions can be used wherever comparison
expressions can be used.  They can be used in <code>if</code> and <code>while</code>
statements.  However, a matrix value used as the condition in an
<code>if</code> or <code>while</code> statement is only true if <em>all</em> of its
elements are nonzero.

   <p>Like comparison operations, each element of an element-by-element
boolean expression also has a numeric value (1 if true, 0 if false) that
comes into play if the result of the boolean expression is stored in a
variable, or used in arithmetic.

   <p>Here are descriptions of the three element-by-element boolean operators.

     <dl>
<dt><var>boolean1</var><code> &amp; </code><var>boolean2</var><dd><a name="index-g_t_0026-639"></a>Elements of the result are true if both corresponding elements of
<var>boolean1</var> and <var>boolean2</var> are true.

     <br><dt><var>boolean1</var><code> | </code><var>boolean2</var><dd><a name="index-g_t_007c-640"></a>Elements of the result are true if either of the corresponding elements
of <var>boolean1</var> or <var>boolean2</var> is true.

     <br><dt><code>! </code><var>boolean</var><dt><code>~ </code><var>boolean</var><dd><a name="index-g_t_007e-641"></a><a name="index-g_t_0021-642"></a>Each element of the result is true if the corresponding element of
<var>boolean</var> is false. 
</dl>

   <p>These operators work on an element-by-element basis.  For example, the
expression

<pre class="example">     [1, 0; 0, 1] &amp; [1, 0; 2, 3]
</pre>
   <p class="noindent">returns a two by two identity matrix.

   <p>For the binary operators, broadcasting rules apply.  See <a href="Broadcasting.html#Broadcasting">Broadcasting</a>. 
In particular, if one of the operands is a scalar and the other a
matrix, the operator is applied to the scalar and each element of the
matrix.

   <p>For the binary element-by-element boolean operators, both subexpressions
<var>boolean1</var> and <var>boolean2</var> are evaluated before computing the
result.  This can make a difference when the expressions have side
effects.  For example, in the expression

<pre class="example">     a &amp; b++
</pre>
   <p class="noindent">the value of the variable <var>b</var> is incremented even if the variable
<var>a</var> is zero.

   <p>This behavior is necessary for the boolean operators to work as
described for matrix-valued operands.

   <p><a name="index-g_t_0026-643"></a><!-- and src/data.cc -->
<a name="doc_002dand"></a>

<div class="defun">
&mdash; Built-in Function:  <b>and</b> (<var>x, y</var>)<var><a name="index-and-644"></a></var><br>
&mdash; Built-in Function:  <b>and</b> (<var>x1, x2, <small class="dots">...</small></var>)<var><a name="index-and-645"></a></var><br>
<blockquote><p>Return the logical AND of <var>x</var> and <var>y</var>. 
This function is equivalent to <code>x&nbsp;&amp;&nbsp;y</code><!-- /@w -->. 
If more arguments are given, the logical and is applied
cumulatively from left to right:

     <pre class="example">            (...((x1 &amp; x2) &amp; x3) &amp; ...)
</pre>
        <p>At least one argument is required. 
<!-- Texinfo @sp should work but in practice produces ugly results for HTML. -->
<!-- A simple blank line produces the correct behavior. -->
<!-- @sp 1 -->

     <p class="noindent"><strong>See also:</strong> <a href="doc_002dor.html#doc_002dor">or</a>, <a href="doc_002dnot.html#doc_002dnot">not</a>, <a href="doc_002dxor.html#doc_002dxor">xor</a>. 
</p></blockquote></div>

   <p><a name="index-g_t_007e-646"></a><a name="index-g_t_0021-647"></a><!-- not src/data.cc -->
<a name="doc_002dnot"></a>

<div class="defun">
&mdash; Built-in Function:  <b>not</b> (<var>x</var>)<var><a name="index-not-648"></a></var><br>
<blockquote><p>Return the logical NOT of <var>x</var>.  This function is equivalent to
<code>! x</code>. 
<!-- Texinfo @sp should work but in practice produces ugly results for HTML. -->
<!-- A simple blank line produces the correct behavior. -->
<!-- @sp 1 -->

     <p class="noindent"><strong>See also:</strong> <a href="doc_002dand.html#doc_002dand">and</a>, <a href="doc_002dor.html#doc_002dor">or</a>, <a href="doc_002dxor.html#doc_002dxor">xor</a>. 
</p></blockquote></div>

   <p><a name="index-g_t_007c-649"></a><!-- or src/data.cc -->
<a name="doc_002dor"></a>

<div class="defun">
&mdash; Built-in Function:  <b>or</b> (<var>x, y</var>)<var><a name="index-or-650"></a></var><br>
&mdash; Built-in Function:  <b>or</b> (<var>x1, x2, <small class="dots">...</small></var>)<var><a name="index-or-651"></a></var><br>
<blockquote><p>Return the logical OR of <var>x</var> and <var>y</var>. 
This function is equivalent to <code>x&nbsp;|&nbsp;y</code><!-- /@w -->. 
If more arguments are given, the logical or is applied
cumulatively from left to right:

     <pre class="example">            (...((x1 | x2) | x3) | ...)
</pre>
        <p>At least one argument is required. 
<!-- Texinfo @sp should work but in practice produces ugly results for HTML. -->
<!-- A simple blank line produces the correct behavior. -->
<!-- @sp 1 -->

     <p class="noindent"><strong>See also:</strong> <a href="doc_002dand.html#doc_002dand">and</a>, <a href="doc_002dnot.html#doc_002dnot">not</a>, <a href="doc_002dxor.html#doc_002dxor">xor</a>. 
</p></blockquote></div>

   </body></html>