lbitbits.c File Reference

#include "f2c.h"

Include dependency graph for lbitbits.c:

Go to the source code of this file.

Defines

#define LONGBITS   32

Functions

integer lbit_bits (integer a, integer b, integer len)
integer lbit_cshift (integer a, integer b, integer len)


Define Documentation

#define LONGBITS   32

Definition at line 7 of file lbitbits.c.

Referenced by lbit_cshift().


Function Documentation

integer lbit_bits ( integer  a,
integer  b,
integer  len 
)

Definition at line 14 of file lbitbits.c.

References L, long, x, and y.

00016 {
00017         /* Assume 2's complement arithmetic */
00018 
00019         unsigned long x, y;
00020 
00021         x = (unsigned long) a;
00022         y = (unsigned long)-1L;
00023         x >>= b;
00024         y <<= len;
00025         return (integer)(x & ~y);
00026         }

integer lbit_cshift ( integer  a,
integer  b,
integer  len 
)

Definition at line 32 of file lbitbits.c.

References long, LONGBITS, x, y, and z.

00034 {
00035         unsigned long x, y, z;
00036 
00037         x = (unsigned long)a;
00038         if (len <= 0) {
00039                 if (len == 0)
00040                         return 0;
00041                 goto full_len;
00042                 }
00043         if (len >= LONGBITS) {
00044  full_len:
00045                 if (b >= 0) {
00046                         b %= LONGBITS;
00047                         return (integer)(x << b | x >> (LONGBITS -b) );
00048                         }
00049                 b = -b;
00050                 b %= LONGBITS;
00051                 return (integer)(x << (LONGBITS - b) | x >> b);
00052                 }
00053         y = z = (unsigned long)-1;
00054         y <<= len;
00055         z &= ~y;
00056         y &= x;
00057         x &= z;
00058         if (b >= 0) {
00059                 b %= len;
00060                 return (integer)(y | z & (x << b | x >> (len - b)));
00061                 }
00062         b = -b;
00063         b %= len;
00064         return (integer)(y | z & (x >> b | x << (len - b)));
00065         }


Generated on Sun Mar 4 15:04:49 2007 for Scilab [trunk] by  doxygen 1.5.1