Skip to content

How to Check if a Number is a Power of Two in Batch Script

Learn two efficient methods to verify if a number is a power of two in Windows Batch scripting: a fast bitwise AND trick (n & (n-1) == 0) and a loop-based division approach, with code examples and edge-case handling.

A Power of Two is any number that can be expressed as 2^n (where n is a non-negative integer). The sequence goes: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, and so on. These numbers are foundational in computing, memory sizes, buffer allocations, and bit-level operations all revolve around powers of 2. In Batch, there are two ways to check: a "Loop Division" method and a clever "Bitwise AND" trick.

In this guide, we will demonstrate both approaches.

Method 1: The Bitwise AND Trick (Fastest)

A power of two in binary has exactly one bit set to 1 (e.g., 1000 = 8). The expression n AND (n - 1) will be zero only if n is a power of two.

Implementation Script

@echo off
setlocal enabledelayedexpansion

set /p "num=Enter a number: "

:: Validate: Must be a positive integer
if !num! LEQ 0 (
    echo [NO] !num! is not a power of two.
    pause
    exit /b
)

:: Bitwise AND check: n & (n-1) == 0
set /a "check=num & (num - 1)"

if !check! EQU 0 (
    echo [YES] !num! IS a power of two.
) else (
    echo [NO] !num! is NOT a power of two.
)

pause

Method 2: Repeated Division (Intuitive)

If you repeatedly divide the number by 2 and it always divides evenly (no remainder) until you reach 1, it is a power of two.

Implementation Script

@echo off
setlocal enabledelayedexpansion

set /p "num=Enter a number: "

if !num! LEQ 0 (
    echo [NO] Not a power of two.
    pause
    exit /b
)

set "val=!num!"

:div_loop
if !val! EQU 1 (
    echo [YES] !num! IS a power of two.
    pause
    exit /b
)

set /a "remainder=val %% 2"
if !remainder! NEQ 0 (
    echo [NO] !num! is NOT a power of two.
    pause
    exit /b
)

set /a "val/=2"
goto :div_loop

Why Check for Powers of Two?

  1. Memory Allocation: Verifying that a buffer size or partition size is a "clean" power of 2 (like 256, 512, 1024) before passing it to a system utility.
  2. Bit Manipulation: If a value is a power of two, it represents a single active flag in a bitmask, which simplifies debugging bitwise settings.
  3. Performance Tuning: Many algorithms run fastest when the input size is a power of two (e.g., FFT, hash table sizes).

Important Considerations

Conclusion

Checking for powers of two is a quick, elegant operation that connects your Batch scripts to the fundamental principles of computing. The bitwise AND trick (n & (n-1) == 0) is one of the most efficient single-line checks in all of programming. By mastering this technique, you gain the ability to validate memory configurations, optimize algorithm inputs, and debug bitmask flags with absolute precision.

Navigation