b i k a Postado Novembro 9, 2008 Denunciar Share Postado Novembro 9, 2008 (editado) pessoal, olhem esse exemplomain() { 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 Novembro 9, 2008 por b i k a Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Novembro 9, 2008 Denunciar Share Postado Novembro 9, 2008 (editado) 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 Novembro 9, 2008 por Durub Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --bika -- Postado Novembro 10, 2008 Denunciar Share Postado Novembro 10, 2008 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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Novembro 10, 2008 Denunciar Share Postado Novembro 10, 2008 != 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 b i k a Postado Novembro 10, 2008 Autor Denunciar Share Postado Novembro 10, 2008 hmmm agora entendi kuroi. não sabia dessa pre determinaçao de que 0 = false e 1 = true.Brigadao! abs Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
b i k a
pessoal, olhem esse exemplo
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 aLink para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
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.