Skip to content
BitVecCountZeros

BitVecCountZeros

BitVecCountZeros

Description

Count number of bits set to 0 in bitvector.

Parameters

Name Direction Description
bv in Bitvector to count zeros in

Usage example (from documentation)

  u64 zeros = BitVecCountZeros(&flags);

Returns

Number of bits set to 0

Usage example (Cross-references)

Usage examples (Cross-references)
    }
    
    u64 BitVecCountZeros(BitVec *bitvec) {
        ValidateBitVec(bitvec);
        return bitvec->length - BitVecCountOnes(bitvec);
    
        // Count true and false bits
        bool result = (BitVecCountOnes(&bv) == 3) && (BitVecCountZeros(&bv) == 2);
    
        BitVecDeinit(&bv);
        // Test empty bitvector
        result = result && (BitVecCountOnes(&bv) == 0);
        result = result && (BitVecCountZeros(&bv) == 0);
    
        // Test single bit
        BitVecPush(&bv, true);
        result = result && (BitVecCountOnes(&bv) == 1);
        result = result && (BitVecCountZeros(&bv) == 0);
    
        // Test all same bits
        }
        result = result && (BitVecCountOnes(&bv) == 100);
        result = result && (BitVecCountZeros(&bv) == 0);
    
        BitVecDeinit(&bv);
        // Count and verify
        result = result && (BitVecCountOnes(&bv) == 3);
        result = result && (BitVecCountZeros(&bv) == 2);
    
        // Flip some bits and verify
    
        result = result && (BitVecCountOnes(&bv) == 5);
        result = result && (BitVecCountZeros(&bv) == 0);
    
        BitVecDeinit(&bv);
        // Verify counts
        result = result && (BitVecCountOnes(&bv) == 500);
        result = result && (BitVecCountZeros(&bv) == 500);
    
        // Flip some bits and verify
    
        result = result && (BitVecCountOnes(&bv) == 500);
        result = result && (BitVecCountZeros(&bv) == 500);
    
        BitVecDeinit(&bv);
        // Test count operations
        result = result && (BitVecCountOnes(&bv) == 1);
        result = result && (BitVecCountZeros(&bv) == 1);
    
        BitVecDeinit(&bv);
    
        result = result && (BitVecCountOnes(&bv) == expected_true_count);
        result = result && (BitVecCountZeros(&bv) == (size - expected_true_count));
    
        // Flip every 7th bit
            BitVecPush(&bv, false);
        }
        result = result && (BitVecCountZeros(&bv) == 64);
        result = result && (BitVecCountOnes(&bv) == 0);
        }
        result = result && (BitVecCountOnes(&bv) == 64);
        result = result && (BitVecCountZeros(&bv) == 0);
    
        // Test checkerboard pattern
        }
        result = result && (BitVecCountOnes(&bv) == 32);
        result = result && (BitVecCountZeros(&bv) == 32);
    
        // Test sparse pattern (every 8th bit)
        }
        result = result && (BitVecCountOnes(&bv) == 8);
        result = result && (BitVecCountZeros(&bv) == 56);
    
        // Test random-like pattern (using simple algorithm)
        // Test counting
        bool result = (BitVecCountOnes(&bv) == 3);
        result      = result && (BitVecCountZeros(&bv) == 4);
    
        // Test with all ones
    
        result = result && (BitVecCountOnes(&bv) == 3);
        result = result && (BitVecCountZeros(&bv) == 0);
    
        // Clean up
        // Test count on empty bitvec
        result = result && (BitVecCountOnes(&bv) == 0);
        result = result && (BitVecCountZeros(&bv) == 0);
    
        // Test count with single bit
        BitVecPush(&bv, true);
        result = result && (BitVecCountOnes(&bv) == 1);
        result = result && (BitVecCountZeros(&bv) == 0);
    
        BitVecClear(&bv);
        BitVecPush(&bv, false);
        result = result && (BitVecCountOnes(&bv) == 0);
        result = result && (BitVecCountZeros(&bv) == 1);
    
        // Test count with large uniform data
        }
        result = result && (BitVecCountOnes(&bv) == 1000);
        result = result && (BitVecCountZeros(&bv) == 0);
    
        BitVecDeinit(&bv);
    
        result = result && (BitVecCountOnes(&bv) == 0);
        result = result && (BitVecCountZeros(&bv) == 100);
    
        // Verify all bits are false
    
        result = result && (BitVecCountOnes(&bv) == 100);
        result = result && (BitVecCountZeros(&bv) == 0);
    
        // Test checkerboard pattern
    
        result = result && (BitVecCountOnes(&bv) == 50);
        result = result && (BitVecCountZeros(&bv) == 50);
    
        // Verify checkerboard pattern
Last updated on