Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Duvida com a simbologia


b i k a

Pergunta

pessoal, olhem esse exemplo

main()
{
    short x = 0;
    
    if( !x )
        printf(" teste 1");
    else
        printf(" teste 2 ");

    return 0;
}
main()
{
    short x = 1;
    
    if( !x )
        printf(" teste 1");
    else
        printf(" teste 2 ");

    return 0;
}

minha duvida e o papel do ! (not)

porque no ex 1 ele imprime "teste1" e no exemplo 2 "teste 2"

alguém poderia me explicar essa logica?

Obrigado!

Editado por b i k a
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

O operador bitwise not (~) inverte os bits:

NOT 1001 1101 =

0110 0010.

Já o logical not (!) trata o valor todo como um boolean, e caso seja true, vai para false e vice-versa.

#include <stdio.h>

int main(void) {
    unsigned char x = 0x0F; /* 0000 1111 - 15 */
    x = ~x; /* 1111 0000 - 240 */
    printf("%d\n", x);
    
    if( !(!x) ) /* true -> false -> true */
        printf("x e true: %d", x);
        
    return 0;
}

Abraços.

Editado por Durub
Link para o comentário
Compartilhar em outros sites

  • 0

ainda não entendi =/

o que eu estava pensando era que

if( !x )
teria a mesma funcao de
if( x != 0 )

(no primeiro exemplo no caso)

mas vi que não e isso. pode tentar me explicar de outra maneira por favor?

Obrigado!

Link para o comentário
Compartilhar em outros sites

  • 0

!= significa diferente.

! significa não.

pense em != como "não igual".

if( x != 0 )
isso aqui significa "se x diferente de 0"
if( !x )
agora isso aqui significa "se não x" o q isso quer dizer?? entenda assim, 1 é verdadeiro (true) e 0 é falso (false). pra você entender mais facil, esqueca os valores numericos, pensa só no tipo booleano, de 0 e 1. o q o ! faz é negar a expressao. se for 1 (true) ele transforma em 0 (false) e vice-versa. se eu faco assim:
bool x = 1;
significa q x é verdadeiro. entenda tb q o if só vai aceitar a expressa q retorna verdadeiro. ai se eu faco assim:
bool x = 1;

    if( x )
        printf(" teste 1");
    else
        printf(" teste 2 ");[/code] ele vai printar "teste 1", porque x é verdadeiro (if (x) -> "se x for verdadeiro"). agora isso aqui:
[code]bool x = 1;

    if( !x )
        printf(" teste 1");
    else
        printf(" teste 2 ");

vai printar "teste 2", porque x é verdadeiro, mas a negacao (o !) de x, ou seja, a negacao de verdadeiro é falso. ou seja, se o resultado a expressao do if, é falsa, ele não entra no if e sim no else (se existir o else, como no exemplo).

agora com o short, o q acontece é q ele entende como true qualquer valor numerico diferente de 0.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...