The biggest reason the operators don't exist is probably that K&R didn't think of any appealing way to define them. I've also sometimes wanted a ->= operator (ptr->=next would be equivalent to ptr = ptr->whatever).
A problem I think with &&= is that it's not obvious which of the following would be most useful, or which it's supposed to be:
if (lhs && rhs) lhs = 1; else lhs = 0;
if (!rhs) lhs = 0; else lhs = !(!lhs));
if (lhs && !rhs) lhs = 0;
if (!rhs) lhs = 0;
The first variation is the one most clearly suggested by the syntax, but from a practical standpoint, if neither term is zero, it would often be more useful to leave the left-hand side alone than to set it to "1".
BTW, I've often wished for a variation of the comma operator which would evaluate the left side, save the value, then evaluate the right side, and return the value of the left side. Equivalent to:
int foo(int p1, int p2) return p1;
except applicable to any type (p2 need not be the same type as p1, and could be void), and with a guaranteed left-to-right evaluation order. Would be very handy for things like post-increment indexing with a non-unit step, e.g., arr[ptr ~, ptr+=2]; or for certain types of data-swap operations, e.g., var1 = (var2 ~, var2=var1); etc.