Dovetail two blocks of bits
JavaScript (ES6),  63 54 52  50 bytes
Saved 2 bytes by applying an optimization similar to the one suggested by @AZTECCO on my C answer
Expects (a)(b), where a and b are bytes. Returns 0 if the blocks can dovetail perfectly or 1 otherwise.
a=&gt;g=b=&gt;b?a&lt;&lt;8&amp;b|(c=a&lt;&lt;8|b,c+=c&amp;-c)&amp;c-1&amp;&amp;g(b&lt;&lt;1):1

Try it online!
How?
The recursive function g attempts to shift b to the left, 1 position at a time, until the following conditions are both met:

(a &lt;&lt; 8) &amp; b is equal to 0, i.e. a &lt;&lt; 8 and b have no set bits in common
c = (a &lt;&lt; 8) | b is a sequence of consecutive 1's, possibly followed by trailing 0's

For the second test, we add to c the rightmost set bit in c and see if this results in a single 1, by carry propagation along the sequence of consecutive 1's.
We use the following bitwise tricks:
c &amp; -c      // returns the rightmost set bit in c

c &amp; (c - 1) // returns c without the rightmost set bit in c
            // (0 if c is an exact power of 2)

Example:
0111111000 + (0111111000 &amp; -0111111000) = 0111111000 + 0000001000 = 1000000000
1000000000 &amp; (1000000000 - 1) = 1000000000 &amp; 0111111111 = 0

We stop the recursion when b = 0, which means that all bits have been thrown away. (This is why we do b &lt;&lt; 1 instead of b * 2, so that b is forced to a 32-bit integer rather than an IEEE 754 floating-point number.)