Ir ao conteúdo
  • Cadastre-se
fsander

C Unsigned programa em C

Posts recomendados

Boa tarde, não entendi porque preciso de usar Unsigned neste código!?

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
	unsigned char ch;

	for(;(ch=getch()); ch != 'X'; ch = getch())
		
		printf("%c", ch + 1);
	    printf("\n");
		
		system("pause");
	
	return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Não tenho certeza, mas pode ser que usando "unsigned char", a variável sera tratada como um número inteiro, variando de 0 a 255. Então, na hora de imprimir, será mostrada o código ASCII da letra, ao invés da letra.

Mas é só um palpite.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@fsander Olá. Sugiro estudar sobre modificadores de tipos na linguagem C

Recomendo esse link:

https://www.cprogressivo.net/2013/01/Modificadores-do-tipo-inteiro-int-em-C--short-long-signed-unsigned.html

Segue um link que também recomendo olhar:

http://linguagemc.com.br/tipos-de-dados-em-c/

Dê uma olhada nesse print que peguei desse site mesmo:

647797385_Capturadetelade2019-05-1921-20-15.png.d5710cddaeabb1c4c2005db2d90039b2.png

 

Por exemplo: Se eu quero fazer uso do modificador de tipo para armazenar a idade de uma pessoa, por exemplo, poderia fazer assim:

unsigned int idade = 32;
// ou mesmo assim
unsigned idade = 32; 

Segue outros exemplos simples:

#include <stdio.h>

int main() {

    short i;

    for (i = 0; i < 10; i++) {
        printf("%d ", i);
    }

    return 0;
}
unsigned ch = 'A';
    
printf("%c", ch);

Perceba a diferença usando o operador sizeof:

#include <stdio.h>

int main() {

    int i = 10;
    short int j = 10;

    short x = sizeof(i);
    printf("%d\n", x);

    short y = sizeof(j);
    printf("%d\n", y);

    return 0;
}

Exemplo que peguei no primeiro link que passei:

#include <stdio.h>

int main() {

    printf("int : %d bytes\n", sizeof(int));
    printf("short int: %d bytes\n", sizeof(short));
    printf("long int: %d bytes\n", sizeof(long));

    return 0;
}

Qualquer dúvida é só perguntar

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, Flávio Pedroza disse:

 

Não tenho certeza, mas pode ser que usando "unsigned char", a variável sera tratada como um número inteiro, variando de 0 a 255. Então, na hora de imprimir, será mostrada o código ASCII da letra, ao invés da letra.

Mas é só um palpite.

O seu pensamento passou perto, mas tudo em C e considerado números inteiros (Z={-3,-2,-1,0,1,2,3}) Então a  letra 'A' e a mesma coisa que 65 em decimal ou 0x41h em hexadecimal.

Agora se eu quisesse representar esse caractere aqui '¤' eu teria que utilizar um byte inteiro (char só pode ir de -127...128 e o unsigned char ponde armazenar de 0...255) porque o valor dele em decimal é 207 excedendo o tamanho máximo de char.

um exemplo de como mostrar a tabela ascii.

/* Tabela ascii */
#include <stdio.h>
#include <stdlib.h>

/* Constantes */
#define TABELA_INICIO 0x21
#define TABELA_FINAL 0xFF



int main()
{
    unsigned char codigo;
    /* Mostra Tabela */
    puts("Tabela ascii.");
    for(codigo=TABELA_INICIO; !(codigo==TABELA_FINAL); codigo++)
    {
        static unsigned short contador=0;
        printf("%c,%i ",codigo,codigo);
        if(contador==10)
        {
            printf("\n");           /* Salta uma linha */
            contador=0;
        }
        contador++;
    }
    getchar();
    return(0);
}

Se você retirar o unsigned o código vai repetir para sempre ( o nome do efeito e borrow) porque não vai conseguir chegar a 255 só vai até 128.

 

Em 18/05/2019 às 15:20, fsander disse:

Boa tarde, não entendi porque preciso de usar Unsigned neste código!?


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
	unsigned char ch;

	for(;(ch=getch()); ch != 'X'; ch = getch())
		
		printf("%c", ch + 1);
	    printf("\n");
		
		system("pause");
	
	return 0;
}

 

já nesse código não e necessário utilizar unsigned char, porque a bandeira de saida e o 'X' que 88 em decimal, que também não excede a faixa de char.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@KXSY Olá. Que coisa: Rodei o código do @fsander nesse compilador online e não foi:

https://www.onlinegdb.com/ 

No meu Linux também não vai, pelo arquivo de cabeçalho <conio.h>

Compartilhar este post


Link para o post
Compartilhar em outros sites

@r_Tray para conseguir rodar o código no onlinegdb precisa fazer essas modificações 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
	unsigned char ch;

	for(; ch != 'X'; ch = getchar())	/* Com getchar precisar apertar enter há cada tecla digitada */
		
		printf("%c", ch + 1);
	    printf("\n");
		
		system("pause");			/* Esse system será ignorado no onlinegdb */
	
	return 0;
}

  A biblioteca conio.h será ignorada.

E eu penso como professores de faculdade utilizam código dá era pre DOS, nuklear, dear imgui, SDL2, allegro e openGL ninguém ensina.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@KXSY É. Códigos para se compilar no Turbo C++ ou no Pacific C, baseados no MS-DOS 😕

Mas que nada. Já não dependemos tanto de disquetes de 1.44 MBs hoje em dia

Quando comecei a mexer em computador, se não me engano, era preciso quatro disquetes desses para instalar o Dos e mais sete para instalar o Windows 3.11 😀

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!