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

Palladium

Pergunta

Olá, esta é a primeira vez em que participo de um fórum.

Fiz algoritmo e Pascal, e agora estou começando meus estudos em C!

Porém tenho uma dúvida, estou lendo vários arquivos em PDF, e acabo de descobrir os modificadores denominados 'long' e 'unsigned'. Porém, fui testar, e me surgiu uma dúvida. Por quê, que o 'unsigned' dobra o valor pra 65535, tirando assim a possibilidade de uso de numeros inteiros negativos, e mesmo assim consigo armazenar uma variável acima de seu valor permitido? Logo pensei que isso possa ter alguma ligação com o buffer, mas como não entendo bem do assunto, aproveito para pedir para me explicarem o que é o buffer, e de maneira simples e clara, me pudessem dizer, o que é o buffer overflow e como posso evitá-lo. Já li um pouco a respeito, mas não enxergo o por quê de tanto falarem a respeito, e o por quê de tanta importância. Obrigado!

Editado por Palladium
Esqueci de uma palavra
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Você provavelmente leu que números do tipo int com sinal ficam no intervalo de [−32,768, +32,767], e sem sinal (unsigned) o intervalo é [0, +65,535]. Se você tiver aprendido sobre números binários, vai saber que estes números são definidos assumindo que nesse caso os números inteiros tem um total de 16 bits (= 2 bytes) na forma binária.

Mas na verdade o que o padrão define é que o tipo int deve ter pelo menos 16 bits, ou seja, o tipo int ter mais que 16 bits é aceitável.

O GCC arquitetura x86, que provavelmente é o compilador que você está usando, vem configurado pra o int ter 32 bits (se não me engano você pode mudar essa configuração),  Logo, nesse caso os intervalos serão [−2,147,483,648, +2,147,483,647] para int com sinal e [0, +4,294,967,295] para unsigned.

 

Segue abaixo um código simples para verificar o número de bits do tipo int no seu compilador:

#include <stdio.h>

int main(){
    printf("O tipo int tem %d bits.\n", sizeof(int)*8);
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

  • 0

Exatamente, eu estou o usando o compilador GCC no Code Blocks. Eu só queria confirmar uma coisa.
    No início você disse: 

"Você provavelmente leu que números do tipo int com sinal ficam no intervalo de [−32,768, +32,767], e sem sinal (unsigned) o intervalo é [0, +65535]".

Não seria ao contrário? Pois eu li que números com o 'unsigned' ( assim como unsigned int ) é que têm intervalo de [0, +65535]. Posso estar completamente equivocado, mas foi o que eu li. De qualquer maneira, eu executei o código, e mostrou 32 bits. Obrigado!

Ah não, esquece, agora reli a frase e entendi! Obrigado cara!

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...