Mercurial > hg > octave-lyh
annotate scripts/general/bitcmp.m @ 12604:132c89bb44e3
maint: Refactor general/isXXX.m scripts to put input validation first.
* general/isdir.m, general/isequal.m, general/isequalwithequalnans.m,
general/isscalar.m, general/issquare.m, general/isvector.m: Refactor
code to put input validation first.
* general/iscolumn.m, general/isrow.m : Remove useless initialization
of output variable.
* general/isa.m: Add additional tests for various classes.
author | Rik <octave@nomad.inbox5.com> |
---|---|
date | Wed, 13 Apr 2011 09:32:10 -0700 |
parents | 139f993936af |
children | 72c96de7a403 |
rev | line source |
---|---|
11523 | 1 ## Copyright (C) 2004-2011 David Bateman |
4916 | 2 ## |
7016 | 3 ## This file is part of Octave. |
4916 | 4 ## |
7016 | 5 ## Octave is free software; you can redistribute it and/or modify it |
6 ## under the terms of the GNU General Public License as published by | |
7 ## the Free Software Foundation; either version 3 of the License, or (at | |
8 ## your option) any later version. | |
9 ## | |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
4916 | 14 ## |
15 ## You should have received a copy of the GNU General Public License | |
7016 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
4916 | 18 |
19 ## -*- texinfo -*- | |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
20 ## @deftypefn {Function File} {} bitcmp (@var{A}, @var{k}) |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
21 ## Return the @var{k}-bit complement of integers in @var{A}. If |
6515 | 22 ## @var{k} is omitted @code{k = log2 (bitmax) + 1} is assumed. |
4916 | 23 ## |
24 ## @example | |
9051
1bf0ce0930be
Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
25 ## @group |
4916 | 26 ## bitcmp(7,4) |
27 ## @result{} 8 | |
28 ## dec2bin(11) | |
29 ## @result{} 1011 | |
6515 | 30 ## dec2bin(bitcmp(11, 6)) |
31 ## @result{} 110100 | |
9051
1bf0ce0930be
Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
32 ## @end group |
4916 | 33 ## @end example |
5642 | 34 ## @seealso{bitand, bitor, bitxor, bitset, bitget, bitcmp, bitshift, bitmax} |
5053 | 35 ## @end deftypefn |
4916 | 36 |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
37 ## Liberally based on the version by Kai Habel from octave-forge |
4916 | 38 |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
39 function C = bitcmp (A, k) |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
40 |
4916 | 41 if (nargin < 1 || nargin > 2) |
6046 | 42 print_usage (); |
4916 | 43 endif |
44 | |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
45 if (nargin == 2 && (! isscalar (k) || (floor (k) != k))) |
11472
1740012184f9
Use uppercase for variable names in error() strings to match Info documentation. Only m-files done.
Rik <octave@nomad.inbox5.com>
parents:
11469
diff
changeset
|
46 error ("bitcmp: K must be a scalar integer"); |
6515 | 47 endif |
48 | |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
49 if (isa (A, "double")) |
6515 | 50 bmax = bitmax; |
7333 | 51 amax = ceil (log2 (bmax)); |
4916 | 52 else |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
53 if (isa (A, "uint8")) |
6515 | 54 amax = 8; |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
55 elseif (isa (A, "uint16")) |
6515 | 56 amax = 16; |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
57 elseif (isa (A, "uint32")) |
6515 | 58 amax = 32; |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
59 elseif (isa (A, "uint64")) |
6515 | 60 amax = 64; |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
61 elseif (isa (A, "int8")) |
6515 | 62 amax = 8; |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
63 elseif (isa (A, "int16")) |
6515 | 64 amax = 16; |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
65 elseif (isa (A, "int32")) |
6515 | 66 amax = 32; |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
67 elseif (isa (A, "int64")) |
6515 | 68 amax = 64; |
4950 | 69 else |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
70 error ("bitcmp: invalid class %s", class (A)); |
4950 | 71 endif |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
72 bmax = intmax (class (A)); |
4916 | 73 endif |
74 | |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
75 if (nargin == 1 || k == amax) |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
76 C = bitxor (A, bmax); |
6515 | 77 else |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
78 m = double (k); |
6515 | 79 if (any (m < 1) || any (m > amax)) |
12480
139f993936af
Uppercase variables in script error strings.
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
80 error ("bitcmp: K must be in the range [1,%d]", amax); |
4916 | 81 endif |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
82 mask = bitshift (bmax, k - amax); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
83 C = bitxor (bitand (A, mask), mask); |
4916 | 84 endif |
6515 | 85 endfunction |
4916 | 86 |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
87 |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
88 %!test |
6515 | 89 %! Amax=53; |
90 %! Bmax = bitmax; | |
91 %! A = bitshift(Bmax,-2); | |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
92 %! assert(bitcmp(A,Amax),bitor(bitshift(1,Amax-1),bitshift(1,Amax-2))); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
93 %! assert(bitcmp(A,Amax-1),bitshift(1,Amax-2)); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
94 %! assert(bitcmp(A,Amax-2),0); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
95 %!test |
6515 | 96 %! Amax=8; |
97 %! Bmax = intmax('uint8'); | |
98 %! A = bitshift(Bmax,-2); | |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
99 %! assert(bitcmp(A,Amax),bitor(bitshift(uint8(1),Amax-1),bitshift(uint8(1),Amax-2))); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
100 %! assert(bitcmp(A,Amax-1),bitshift(uint8(1),Amax-2)); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
101 %! assert(bitcmp(A,Amax-2),uint8(0)); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
102 %!test |
6515 | 103 %! Amax=16; |
104 %! Bmax = intmax('uint16'); | |
105 %! A = bitshift(Bmax,-2); | |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
106 %! assert(bitcmp(A,Amax),bitor(bitshift(uint16(1),Amax-1),bitshift(uint16(1),Amax-2))); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
107 %! assert(bitcmp(A,Amax-1),bitshift(uint16(1),Amax-2)); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
108 %! assert(bitcmp(A,Amax-2),uint16(0)); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
109 %!test |
6515 | 110 %! Amax=32; |
111 %! Bmax = intmax('uint32'); | |
112 %! A = bitshift(Bmax,-2); | |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
113 %! assert(bitcmp(A,Amax),bitor(bitshift(uint32(1),Amax-1),bitshift(uint32(1),Amax-2))); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
114 %! assert(bitcmp(A,Amax-1),bitshift(uint32(1),Amax-2)); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
115 %! assert(bitcmp(A,Amax-2),uint32(0)); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
116 %!test |
6515 | 117 %! Amax=64; |
118 %! Bmax = intmax('uint64'); | |
119 %! A = bitshift(Bmax,-2); | |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
120 %! assert(bitcmp(A,Amax),bitor(bitshift(uint64(1),Amax-1),bitshift(uint64(1),Amax-2))); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
121 %! assert(bitcmp(A,Amax-1),bitshift(uint64(1),Amax-2)); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
122 %! assert(bitcmp(A,Amax-2),uint64(0)); |
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
123 |