- Aide de Scilab
- Fonctions Elémentaires
- Opérations binaires
- Nombres complexes
- Arithmétique
- Matrice - génération
- Exponentielle
- Virgule flottante
- Bases de numération
- Matrice - façonnage
- Opérations matricielles
- Chercher et trier
- Ensembles
- Traitement du signal
- Trigonométrie
- &, &&
- cat
- ind2sub
- iscolumn
- isempty
- isequal
- ismatrix
- isrow
- isscalar
- issquare
- isvector
- modulo
- ndims
- |, ||
- size
- sub2ind
Please note that the recommended version of Scilab is 2026.0.0. This page might be outdated.
See the recommended documentation of this function
|, ||
Binary OR between integers. Logical OR over/between booleans and numbers
Syntax
Element-wise operator:
intMat = intA | intB tfMat = A | B
Scalared short-circuited evaluation:
tf = U || V if (U || V) then ... end if (U | V) then ... end while (U || V) then ... end while (U | V) then ... end
Arguments
- intA, intB
Arrays of encoded integers of any inttype.
intAandintBmust have the same sizes to be processed element-wise. IfintAorintBis a scalar, it is priorly replicated to the size of the other operand before processing.If
intAandintBhave not the same integer inttype, the operand with the smaller encoding is converted to the wider according to the following ranks: int8 < uint8 < int16 < uint16 < int32 < uint32 < int64 < uint64.- intMat
Array of encoded integers with the same sizes of
intAandintB, and of the wider inttype of both (see hereabove). For any indexi,intMat(i) = bitor(intA(i), intB(i))
intA | []and[] | intAreturn the boolean arrayintA~=%nan.- A, B
Arrays of booleans or of numbers: encoded integers of any inttype, real or complex numbers.
AandBmay have distinct types, and may be one or both sparse-encoded. The special case whereAandBare both encoded integers is excluded (see here-above).AandBmust have the same sizes to be processed element-wise. IfAorBis a scalar, it is priorly replicated to the size of the other operand before processing.- tfMat
Boolean array with the same sizes of
AandB. IfAorBis sparse-encoded, so istfMat.For any index
i,tfMat(i)is%Tif eitherA(i)orB(i)is%Tor not zero. Otherwise,tfMat(i)is set to%F.
A | []and[] | Areturn[].- U, V
Arrays of full or sparse-encoded booleans or of numbers of any types and encoding: any inttype of encoded integers, full or sparse-encoded real or complex numbers.
UandVmay have distinct data types, number of dimensions, and sizes.- tf
single boolean:
U || Vis equal toor(U) | or(V), without evaluatingor(V)ifor(U)is true (this is why the||operator is so-called short-circuited).See or() for the definition of the evaluation to true depending on type and encoding.
Description
- ||
For any boolean or numerical operands
UandV,G = U || Vis equivalent toif or(U), G = %T, else G = or(V), end.UandVmay have distinct sizes or numbers of dimensions.- The result is always a single boolean.
or(V)is evaluated only ifor(U)is false. This mainly avoids yielding errors when further operations withVare meaningless or prone to error whenUis true. See examples.
- |
When the
|operator is used inside a logical condition tested by awhileor by anifcontrol structure, it is equivalent to the||operator (see above).Otherwise,
|has two different actions:- When both operands are encoded integers,
intA | intBis processed element-wise and yields an array of integers resulting from the bitwiseANDbetween corresponding components. - Otherwise, when operands are arrays of numbers or/and booleans, they are still processed element-wise. Provided that null numbers are equivalent to false booleans, the result is an array of booleans.
- When both operands are encoded integers,
Comparing | and || with
bitor() and or() :
or(A)is equivalent toA || %F, whereasor(A, side)has no equivalence with||.intA | intBaccepts negative integers, whilebitor(intA, intB)does not.bitor(A,B)works bitwise with decimal-encoded integers.
![]() |
![]() |
|
Examples
A = [0 1; 1 0]; // equivalent to [%f %t ; %t %f] B = [1 1; 0 0]; // equivalent to [%t %t ; %f %f] spA = sparse(A); spB = sparse(B); spbA = sparse(A<>0); spbB = sparse(B<>0); iA = int8(A); iB = int8(B); cA = A + 0*%i; cB = B + 0*%i; // | as logical operation A | B A | spB // Result is sparse encoded iA | spB // Result is sparse encoded cA | iB A | %nan // %nan is %t // | as bitwise operation iA | iB Ai8 = int8([ -1, 1; 127, -128]); // Integer representation of Ai8: // [ 1111 1111, 0000 0001 ; // 0111 1111, 1000 0000 ] Bi8 = int8([-2, 0; 126, -127]); // Integer representation of Bi8: // [ 1111 1110, 0000 0000 ; // 0111 1110, 1000 0001 ] Ai8 | Bi8 // Integer promotion Ai16 = int16(Ai8); Bui32 = uint32(Bi8); r = Ai16 | Bui32, typeof(r) // Shorted | or ||: // ---------------- function res=foo() error("foo() shall not be called") endfunction // | (simple) is always shorted in any if's condition: if %T | foo() then // foo() is not called and this is not executed end A || foo() // A, iA and cA have at least one non-zero element. iA || foo() // Therefore, foo() is not called cA || foo()
Avoiding conditional errors in or out of if and
while conditions:
A = [ 1 3 -2 ; 4 -1 2] c = ~issquare(A) | det(A)~=0 // det(A) is evaluated despite ~issquare(A) is true (so c is true anyway) // But A should be square to be able to compute its det(). ==> ERROR // Now, we use the short-circuited || : // det(A) is NO LONGER computed, since ~issquare(A) is true => anyway c is true c = ~issquare(A) || det(A)~=0 // => NO ERROR // In an "if" (or "while") tested condition, | is equivalent to || if ~issquare(A) | det(A)~=0 // => NO ERROR B = A * A.' end
--> A = [ 1 3 -2 ; 4 -1 2] A = 1. 3. -2. 4. -1. 2. --> c = ~issquare(A) | det(A)~=0 det: Wrong type for input argument #1: Square matrix expected. --> c = ~issquare(A) || det(A)~=0 // => NO ERROR c = T --> if ~issquare(A) | det(A)~=0 // => NO ERROR > B = A * A.' > end B = 14. -3. -3. 21.
Constant polynomials or rationals can't be processed with | or ||:
p = 1 + 0*%z typeof(p) p | 1
--> p = 1 + 0*%z p = 1 --> typeof(p) ans = polynomial --> p | 1 Undefined operation for the given operands. check or define function %p_g_s for overloading.
See also
- or — OU logique entre éléments d'un tableau booléen ou numérique
- bitor — bitwise logical OR between element-wise integers of 2 arrays
- and operator (&) — Binary AND between integers. Logical AND over/between booleans and numbers
- not ~ — négation logique
- if — Mot-clé utilisé pour une exécution conditionnelle
- while — mot-clé utilisé dans une structure while ... end
- overloading — display, functions and operators overloading capabilities
History
| Version | Description |
| 6.0 | || operator added |
| Report an issue | ||
| << ndims | Fonctions Elémentaires | size >> |
