Best practice for combining two logical bytetensors?

Cant understand how come I havent encountered this question before, but… how to combine two byte tensors used to represent masks / true/false values? Two ways that work are:

 res = a * b   # method one
 res = a & b   # method two

However, I dislike the first, since multiplication sounds more expensive than bool ops (I know in practice, the difference will be zero, if it’s running on cuda, by the time the tensors move on-chip and back… but still). I dislike the second having been bitten in previous code in things where I assume anything non-zero is True, but & is bitwise, and doesnt really work like this. So I’d rather do something like:

res = a and b  # preferred method one, but fails
res = a && b   # preferred method two, but fails

What is the most standard way of combining two logical bytetensors, in practice?