Here's an example equation: $$ \begin{equation}(d - x<<1)\,\& \,x =0 \,, ~0\leq2x<d \end{equation} $$ where $\&$ is the logical and operator, $<<$ is the left bitshift operator (equivalent to multiplication by powers of 2) and $d,x$ are binary bit sequences and $d$ is known. It's easy enough to see that this is a system of simple Boolean equations. Denoting $d$ and $x$ as $$ d=\begin{bmatrix} \vdots \\ d_2 \\ d_1 \\d_0 \end{bmatrix},~~~ x=\begin{bmatrix} \vdots \\ x_2 \\ x_1 \\x_0 \end{bmatrix} ,~~d_n,x_n \in \{0,1\} $$ using the distributivity of $\&$ we can rewrite the equation as $$ \begin{align} \vdots \\d_2\&x_2 &=x_1\&x_2 \\ d_1\&x_1 &=x_0\&x_1 \\ d_0\&x_0 &=0 \end{align} $$ For instance, for $d=(10)_{10}=(1010)_2$ there are exactly 5 solutions, $x=(0)_2,(1)_2, (11)_2,(100)_2,(101)_2$. (The subscript here denotes the base)
Is there a smart way of generating the solutions to this type of system of equations? It's easy enough to iterate over the valid values of x and check each one but can we do any better? Is it at least possible to know the number of solutions?