Mercurial > octave-nkf
comparison scripts/general/bitcmp.m @ 4950:0896307b1b48
[project @ 2004-08-31 21:26:35 by jwe]
author | jwe |
---|---|
date | Tue, 31 Aug 2004 21:26:35 +0000 |
parents | b22a7a1db0d5 |
children | c08cb1098afc |
comparison
equal
deleted
inserted
replaced
4949:f6b63ff1119b | 4950:0896307b1b48 |
---|---|
37 | 37 |
38 if (nargin < 1 || nargin > 2) | 38 if (nargin < 1 || nargin > 2) |
39 usage ("bitcmp (A, n)"); | 39 usage ("bitcmp (A, n)"); |
40 endif | 40 endif |
41 | 41 |
42 cname = class (A); | 42 if (isa (A, "double")) |
43 if (strcmp (cname, "double")) | |
44 Bmax = bitmax; | 43 Bmax = bitmax; |
45 Amax = log2 (Bmax) + 1; | 44 Amax = log2 (Bmax) + 1; |
46 elseif strcmp ("uint", substr (cname, 1, 4)) | 45 _conv = @double; |
47 Bmax = intmax (cname); | |
48 Amax = eval ([cname, " (log2 (double (intmax (cname))) + 1);"]); | |
49 else | 46 else |
50 Bmax = eval ([cname, " (-1);"]); | 47 if (isa (A, "uint8")) |
51 Amax = eval ([cname, " (log2 (double (intmax (cname))) + 2);"]); | 48 Amax = 8; |
49 _conv = @uint8; | |
50 elseif (isa (A, "uint16")) | |
51 Amax = 16; | |
52 _conv = @uint16; | |
53 elseif (isa (A, "uint32")) | |
54 Amax = 32; | |
55 _conv = @uint32; | |
56 elseif (isa (A, "uint64")) | |
57 Amax = 64; | |
58 _conv = @uint64; | |
59 elseif (isa (A, "int8")) | |
60 Amax = 8; | |
61 _conv = @int8; | |
62 elseif (isa (A, "int16")) | |
63 Amax = 16; | |
64 _conv = @int16; | |
65 elseif (isa (A, "int32")) | |
66 Amax = 32; | |
67 _conv = @int32; | |
68 elseif (isa (A, "int64")) | |
69 Amax = 64; | |
70 _conv = @int64; | |
71 else | |
72 error ("invalid class %s", class (A)); | |
73 endif | |
74 Bmax = intmax (class (A)); | |
52 endif | 75 endif |
53 | 76 |
54 Aone = eval ([ cname, "(1);"]); | |
55 if (nargin == 2) | 77 if (nargin == 2) |
56 m = eval ([cname, " (n(:));"]); | 78 m = double (n(:)); |
57 if (any (m < Aone) || any (m > Amax)) | 79 if (any (m < 1) || any (m > Amax)) |
58 error ("n must be in the range [1,%d]", Amax); | 80 error ("n must be in the range [1,%d]", Amax); |
59 endif | 81 endif |
60 X = bitxor (A, bitshift (Bmax, -n)); | 82 X = bitxor (A, bitshift (Bmax, -int8(n))); |
61 else | 83 else |
62 X = bitxor (A, Bmax); | 84 X = bitxor (A, Bmax); |
63 endif | 85 endif |
64 | 86 |
65 endfunction | 87 endfunction |