Operador Lógico de negação

Meu problema é simples, já que estou começando na programação agora, estou com o seguinte código javascript:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Uso do if</title>
		<script type="text/javascript">
			function ValidadeSexo(){
				//pegando os valores de a,b,x como String
				var stringDeA = prompt("Digite um número inteiro para o valor de a");
				var stringDeB = prompt("Digite um número inteiro para o valor de b");
				var stringDeX = prompt("Digite um número inteiro para o valor de x");
				var c;
				var resultado;
				
				//fazendo a transformação de String para Inteiro
				var a = parseInt(stringDeA);
				var b = parseInt(stringDeB);
				var x = parseInt(stringDeX);
				
				if(!(x > 5){
					c = a + b;
				}else{
					c = a - b; 
				}
				
				resultado = "o valor de c: " + c;
				
				document.getElementById("aprovacao").innerHTML = resultado;
			}
		</script>
	</head>	
	<body>
		<p>
			<button onclick="ValidadeSexo()">Clique aqui para o resultado</button>
		</p>
		<p>
			<span id="aprovacao" name="aprovacao"></span>
		</p>
	</body>
</html>	

Queria saber o porque do operador lógico && não funcionar com o operador de negação, coloquei assim para fazer um teste:

if(!(x > 5 && a > b))

só que não funciona, a condição a > b, somente a condição x>5

Se alguém, me explicar do não funcionamento agradeço.

Para entender o que ocorre, precisamos destrinchar a sentença lógica:
!(x > 5 && a > b)
Essa expressão pode ter as seguintes saídas:

  • X maior que 5 e A maior que B: falsa(x > 5 é true && a > b true, sendo negadas por ! retorna false)
  • X maior que 5 e a menor que B: verdadeira(x > 5 é true && a > b false, sendo negada por ! retorna true)
  • X menor que 5 e A maior que B: verdadeira (x > 5 é false, sendo negada por ! retorna true)
  • X menor que 5 e A menor que B: verdadeira (ambas são falsas, sendo negadas por ! retorna true)

O que eu não entendi é a sua afirmação só que não funciona, a condição a > b, somente a condição x>5

Boa madrugada,

Agora entende a noia, existe uma diferença entre:

!(x > 5 && a > b)
!(x > 5)  && a > b

A primeira fica todo mundo com a negação e a segunda fica só a primeira expressão com a negação.

Obrigado por responder!

Só complementando, existe uma regrinha em álgebra booleana que diz o seguinte:

!(p && q) == !p || !q

assim, quando eu encontro esse tipo de expressão , como !(x > 5 && a > b) eu prefiro converter para a segunda forma, que na minha opinião torna o código mais legível:

!(x > 5 && a > b) == !(x > 5) || !(a > b) == (x <= 5 || a <= b)

Valeu man!

Não sabia dessa regra. Vou começar a adotá-la!