int pvm_code_get_int32(struct pvm_code_handler *code) { pvm_code_check_bounds( code, code->IP+int_size()-1, "get_int32" ); int ret = pvm_code_do_get_int( code->code+code->IP ); code->IP += int_size(); return ret; }
int positive_module ( int n) { unsigned int int_size ( void ); if ( n > 0) return n % int_size (); else return -n % int_size (); }
int bit_set(unsigned int x, int n) { int j = int_size(); unsigned int temp = 1 << (j - 1); temp = temp >> n; return (temp | x); }
unsigned int bitpat_get(unsigned int source, int begin, int len) { unsigned int result = 0; for (int i = 0; i < len; i++){ result <<= 1; result += bit_test(source, int_size () - arg_size (source) + begin + i); } return result; }
//function to calculate the min number of bits needed to represent a value int numberOfBits(unsigned int x) { int sizeOfInt = int_size(); int counter = 0; unsigned int temp = 1 << (sizeOfInt - 1); while ( (temp | x) != x) { temp = temp >> 1; counter++; } return sizeOfInt - counter; }
int bitpat_search( unsigned int source, unsigned int pattern, int n ) { unsigned int temp_pattern, temp_source, loc; unsigned int int_size ( void ); int positive_module ( int n); for ( loc = 0; loc <= int_size () - n; loc++ ) { int j = 0, k = 0; temp_source = source; while ( j < n) { temp_source = bit_set ( temp_source, loc + j ); j++; } temp_pattern = pattern << ( int_size () - n - loc ); while ( k < loc ) { temp_pattern = bit_set ( temp_pattern, k ); k++; } k = loc + n ; while ( k < int_size () ) { temp_pattern = bit_set ( temp_pattern, k ); k++; } printf ( "temp_pattern is %0x and temp_source is %0x and loc is %i\n", temp_pattern, temp_source, loc ); if ( ( temp_pattern & temp_source ) == source) return loc; } return -1; }
int bit_test ( unsigned int value, int n ) { unsigned int i = 1, size; unsigned int int_size ( void ); size = int_size (); n %= size; i = ~ ( i << (31 - n) ); if (value == ( value & i)) return 0; else return 1; }
bool bit_test(unsigned int x, int n) { /*algorithm: *1. j = int_size() *2.temp = 1 << j (left shift 1 j times to place bit on the left) *3.temp = temp >> n *3.temp & x == temp if n bit is set */ int j = int_size(); unsigned int temp = 1 << (j - 1); temp = temp >> n; if ((temp & n) == temp) //nbit is set return true; else return false; }
//extracts a specified set of bits from source starting at start int bitpat_get(unsigned int source, int start, int n) { unsigned int temp, nTempBits,nSourceBits,intSize, offset; intSize = int_size(); nSourceBits = numberOfBits(source); temp = ~0; temp = temp >> (intSize - nSourceBits); temp = temp >> start; nTempBits = numberOfBits(temp); temp = temp & source; if (nTempBits >= n) { offset = nTempBits - n; temp = temp >> offset; }
int main (void) { unsigned int x, n; printf("Number of bits for u int : %i\n", int_size()); printf("Enter int x and bit number to test: "); scanf("%u %u", &x, &n); if (bit_test(x,n)) printf("Bit %i is set on %i\n", n,x); else { printf("Bit %i is not set, setting...\n", n); x = bit_set(x,n); printf("New value of x: %i\n", x); } return 0; }
int bitpat_search(unsigned int source, unsigned int pattern, int n) { unsigned int num1; int m , count = 0; int int_size(void); m = int_size(); num1 = pattern << (m - n); if(source == num1) return 0; while ((source & num1) != num1){ source <<= 1; ++count; if(count > (m - n)) return -1; } return count; }
unsigned int bit_set ( unsigned int value, int n ) { unsigned int i = 1, size; unsigned int int_size ( void ); size = int_size (); n %= size; i = ~ ( i << (31 - n) ); int bit_test ( unsigned int value, int n ); if ( bit_test ( value, n) ) { return value; } else { return value + ~i; } }