Skip to content

BitVecNot

Description

Perform bitwise NOT operation on a bitvector. Result is stored in result.

Parameters

Name Direction Description
result out Bitvector to store result in.
bv in Bitvector operand.

Usage example (from documentation)

  BitVecNot(&result, &flags);

Success

Returns to the caller. result->length == bv->length; each bit result[i] == !bv[i]. The operand bv is unchanged.

Failure

Function cannot fail. Invalid bitvectors are caller bugs and abort via LOG_FATAL.

Usage example (Cross-references)

Usage examples (Cross-references)
    }
    
    void BitVecNot(BitVec *result, BitVec *bitvec) {
        ValidateBitVec(result);
        ValidateBitVec(bitvec);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        WriteFmt("Testing BitVecNot\n");
    
        BitVec bv     = BitVecInit(ALLOCATOR_OF(&alloc));
    
        // Perform NOT operation
        BitVecNot(&result, &bv);
    
        // Expected result: 0101 (NOT 1010)
        // Test NOT on various sizes
        BitVecClear(&bv1);
        BitVecNot(&result_bv, &bv1);
        result = result && (BitVecLen(&result_bv) == 0);
    
        BitVecPush(&bv1, true);
        BitVecNot(&result_bv, &bv1);
        result = result && (BitVecGet(&result_bv, 0) == false);
        }
    
        BitVecNot(&result, &bv1);
        test_result = test_result && (BitVecLen(&result) == 100);
    
        // Test NOT(NOT(A)) = A
        BitVecNot(&result, &bv1);    // result = NOT(A)
        BitVecNot(&result, &result); // result = NOT(NOT(A))
        // Test NOT(NOT(A)) = A
        BitVecNot(&result, &bv1);    // result = NOT(A)
        BitVecNot(&result, &result); // result = NOT(NOT(A))
    
        bool double_not = true;
    
        // Test NOT on large data
        BitVecNot(&result, &bv1);
        test_result = test_result && (BitVecLen(&result) == 1000);
    
        // Test NULL operand - should abort
        BitVecNot(&result, NULL);
    
        BitVecDeinit(&result);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        WriteFmtLn("Testing BitVecNot");
    
        BitVec bv     = BitVecInit(ALLOCATOR_OF(&alloc));
    
        // Perform NOT operation
        BitVecNot(&result, &bv);
    
        // Expected result: 0101 (NOT 1010)
        // Test NOT on various sizes
        BitVecClear(&bv1);
        BitVecNot(&result_bv, &bv1);
        result = result && (BitVecLen(&result_bv) == 0);
    
        BitVecPush(&bv1, true);
        BitVecNot(&result_bv, &bv1);
        result = result && (BitVecGet(&result_bv, 0) == false);
        }
    
        BitVecNot(&result, &bv1);
        test_result = test_result && (BitVecLen(&result) == 100);
    
        // Test NOT(NOT(A)) = A
        BitVecNot(&result, &bv1);    // result = NOT(A)
        BitVecNot(&result, &result); // result = NOT(NOT(A))
        // Test NOT(NOT(A)) = A
        BitVecNot(&result, &bv1);    // result = NOT(A)
        BitVecNot(&result, &result); // result = NOT(NOT(A))
    
        bool double_not = true;
    
        // Test NOT on large data
        BitVecNot(&result, &bv1);
        test_result = test_result && (BitVecLen(&result) == 1000);
    
        // Test NULL operand - should abort
        BitVecNot(&result, NULL);
    
        BitVecDeinit(&result);
Last updated on