Olá Felipe,
O operador lógico nao, ele inverte a condição de entrada, verdadeiro se torna falso e falso se torna verdadeiro, além de ser um operador unário, ou seja, só recebe um valor.
Exemplo:
encontrado = verdadeiro
se (nao encontrado){
p++
}
A sua variável encontrado possui o valor de verdadeiro, mas dentro do se é verificado o valor e usando o nao ele inverte esse valor , ou seja , se a variável encontrado for falso faz tal coisa…
Você sabe que a condição é verdadeira (ou falsa), mas você quer o valor contrário, em uma situação específica.
Espero que tenha conseguido te ajudar.
Caso ainda fique alguma dúvida, só retornar ao fórum 🖖