float OctreeHash::Node::getZ(){ float shift_factor = this->parent->initialD/4; float result = this->parent->initialD/2; unsigned char bitscount = numberOfBits(); if ( bitscount < 4 ) return result; for( unsigned long i = 1 << (bitscount-3), bits = 2; bits < bitscount; i >>= 3, bits += 3, shift_factor /= 2){ if ( i & id ){ result += shift_factor; } else{ result -= shift_factor; } } return result; }
bool bit_test(unsigned int x, int n) { /*algorithm: *1. j = numberOfBits(x) *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 = numberOfBits(x); unsigned int temp = 1 << (j - 1); temp = temp >> n; if ((temp & x) == temp) //nbit is set return true; else return false; }
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); printf("Number of bits in %i is %i\n", x, numberOfBits(x) ); 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; }
inline T floorPowerOf2(T x) { for (T i = 1; i < numberOfBits(x); i += i) x |= (x >> i); return x - (x >> 1); }
void QSslKeyPrivate::decodeDer(const QByteArray &der, bool deepClear) { clear(deepClear); if (der.isEmpty()) return; QAsn1Element elem; if (!elem.read(der) || elem.type() != QAsn1Element::SequenceType) return; if (type == QSsl::PublicKey) { // key info QDataStream keyStream(elem.value()); if (!elem.read(keyStream) || elem.type() != QAsn1Element::SequenceType) return; QVector<QAsn1Element> infoItems = elem.toVector(); if (infoItems.size() < 2 || infoItems[0].type() != QAsn1Element::ObjectIdentifierType) return; if (algorithm == QSsl::Rsa) { if (infoItems[0].toObjectId() != RSA_ENCRYPTION_OID) return; // key data if (!elem.read(keyStream) || elem.type() != QAsn1Element::BitStringType || elem.value().isEmpty()) return; if (!elem.read(elem.value().mid(1)) || elem.type() != QAsn1Element::SequenceType) return; if (!elem.read(elem.value()) || elem.type() != QAsn1Element::IntegerType) return; keyLength = numberOfBits(elem.value()); } else if (algorithm == QSsl::Dsa) { if (infoItems[0].toObjectId() != DSA_ENCRYPTION_OID) return; if (infoItems[1].type() != QAsn1Element::SequenceType) return; // key params QVector<QAsn1Element> params = infoItems[1].toVector(); if (params.isEmpty() || params[0].type() != QAsn1Element::IntegerType) return; keyLength = numberOfBits(params[0].value()); } } else { QVector<QAsn1Element> items = elem.toVector(); if (items.isEmpty()) return; // version if (items[0].type() != QAsn1Element::IntegerType || items[0].value().toHex() != "00") return; if (algorithm == QSsl::Rsa) { if (items.size() != 9 || items[1].type() != QAsn1Element::IntegerType) return; keyLength = numberOfBits(items[1].value()); } else if (algorithm == QSsl::Dsa) { if (items.size() != 6 || items[1].type() != QAsn1Element::IntegerType) return; keyLength = numberOfBits(items[1].value()); } } derData = der; isNull = false; }