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