Посмотри, какой код генерируется твоим компилятором в случае "&&", какой - в случае "*", и сравни.
Для примера (Показать/Скрыть)
File1.cpp.7: int a = 10;
0040116E C745FC0A000000 mov [ebp-$04],$0000000a
File1.cpp.8: int x = 123;
00401175 C745F87B000000 mov [ebp-$08],$0000007b
File1.cpp.10: bool b = ((a > 0) && (a < 12)) && (x > 100);
0040117C 837DFC00 cmp dword ptr [ebp-$04],$00
00401180 7E0C jle $0040118e
00401182 837DFC0C cmp dword ptr [ebp-$04],$0c
00401186 7D06 jnl $0040118e
00401188 837DF864 cmp dword ptr [ebp-$08],$64
0040118C 7F04 jnle $00401192
0040118E 33C0 xor eax,eax
00401190 EB05 jmp $00401197
00401192 B801000000 mov eax,$00000001
00401197 8845F7 mov [ebp-$09],al
File1.cpp.11: bool b1 = ((a > 0) * (a < 12)) * (x > 100);
0040119A 837DFC00 cmp dword ptr [ebp-$04],$00
0040119E 0F9FC2 setnle dl
004011A1 83E201 and edx,$01
004011A4 837DFC0C cmp dword ptr [ebp-$04],$0c
004011A8 0F9CC1 setl cl
004011AB 83E101 and ecx,$01
004011AE 0FAFD1 imul edx,ecx
004011B1 837DF864 cmp dword ptr [ebp-$08],$64
004011B5 0F9FC0 setnle al
004011B8 83E001 and eax,$01
004011BB 0FAFD0 imul edx,eax
004011BE 85D2 test edx,edx
004011C0 0F95C2 setnz dl
004011C3 83E201 and edx,$01
004011C6 8855F6 mov [ebp-$0a],dl
Я бы все-таки оставил &&, во-первых - это дает возможность обходиться без доп. скобок, а во-вторых - приоритеты операций у "*" и у "&&", уж очень разные, тут тоже могут проявиться проблемы.