E ai beleza, bem, vamos ver no que eu consigo te ajudar…
essa primeira parte:
boolean b, b1 = true, b2 = false, b3 = true;
você está atribuindo os valores para as variáveis (no java é possível atribuir o mesmo valor de uma vez para uma ou mais variáveis:boolean b, b1 = true...
essa parte creio que vc pegou fácil, agora quanto a atribuição com condições na terceira linha:
b = !(b1 | b2 && (i++= 10)) & (i++ == 10);
seria algo parecido com:
b recebe inverte(se b1 for verdadeiro ou b2 for verdadeiro e (se i++recebe10 for 11)) e (se i++recebe10 for 11);
isso acima foi o meu “portugol” ou seja uma simples tradução do computacional para uma linguagem mais simples de entendermos.
Agora vamos as explicações dos valores:
a sua variável b acabou com o valor falso porque a condição não foi satisfeita:
b = !(true | false && (i=10) & (i=10));
o que essa parte representa:
no caso do true | false, prevaleceu o true, pois basta apenas uma das duas opções para satisfazer a condição, agora no if interno (i++=10), o que esta ali nada mais é do que 11 (i++) troca pra 10, e por último o if externo, segue a mesma regra para o primeiro, e por fim ao sair de todos os ifs, a um sinal de exclamação, isso significa que o valor booleano que sair da condição acaba sendo invertido (se era true passa a ser false e vice-versa).
No final sua variavel b acaba recebendo isso:
b = !(true && true) & (true)
aqui acaba invertendo para: b = false;
, já o seu i não muda o valor, apenas foi incrementado para satisfazer as condições.
Espero ter te ajudado, tentei simplificar o máximo que pude, mas se caso ainda surgirem dúvidas, por favor avisa ae beleza?
Abraço e boa sorte.