Jump to content

[Resolvido] Duvida - Tipos de Dados Básicos


Recommended Posts

Posted (edited)

Boa tarde,

Se me puderem esclarecer a seguinte duvida agradecia imenso.

Ao estudar C, nomeadamente os Tipos de Dados Básicos, deparei-me com a informação, que o tamanho de um Inteiro varia de arquitectura para arquitectura.Pude ler também que esta situação pode reduzir fortemente a portabilidade dos programas entre máquinas diferentes.

Já sei como fixar o valor de um inteiro através do prefixo de variável short e long.

Mas não sei o porque a alteração do tamanho de um inteiro em bytes?, A influencia que pode ter no programa a nivel de desempenho e em que maneira afecta a portabilidade.

Talvez me tenha fixado num pequeno pormenor, mas lá fiquei curioso.

Obrigado e desculpem a chatice.

Edited by Gonkali

" The quieter you become, the more you are able to hear"

"Eu adoraria mudar o mundo, mas não me deram o código-fonte."

"A arte de programar consiste na arte de organizar e dominar a complexidade."

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Posted

Já sei como fixar o valor de um inteiro através do prefixo de variável short e long.

usa os tipos : <unsigned>int<size>_t

exemplo:

#include <stdint.h>

uint16_t ui16; // unsigned 16 bit integer number
int64_t i64; // signed 64 bit integer number

Mas não sei o porque a alteração do tamanho de um inteiro em bytes?

porque existiu uma evolução enorme desde a criação do C ...

A influencia que pode ter no programa a nivel de desempenho e em que maneira afecta a portabilidade.

não penses muito no desempenho, o compilador está muito habilitado para tratar disso.

no que toca a portabilidade, isso já é outra conversa ...afecta imenso !!!

exemplo: imagina numa máquina 64bits gravares um ficheiro de dados com 3 números (3*64bits), que irá ser aberto futuramente numa máquina de 32bits para ler os mesmo 3 números (3*32bits), ups ...

IRC : sim, é algo que ainda existe >> #p@p
Posted

Isto deriva to tamanho da palavra do CPU. Num processador de 16 bits, esse era o tamanho do inteiro. Quando passamos para processadores de 32 bits, optou-se por aumentar o tamanho do inteiro*. Na passagem para 64 bits, não se aumentou o tamanho, creio que por questões de compatibilidade.

O conselho que te deu o Hippo, é o que eu te daria. Evita muita chatice com tipos. E não só em C. É algo que devia ser prática corrente em todas as linguagens.

*ps: em VB6 o inteiro (integer) ainda é 16 bits. Para variáveis de 32 (signed) usa-se o long, e para variáveis 64bits... não há 😛

Posted

Hippo e Flinger muito obrigado pelos esclarecimentos e ajuda.

Um abraço

" The quieter you become, the more you are able to hear"

"Eu adoraria mudar o mundo, mas não me deram o código-fonte."

"A arte de programar consiste na arte de organizar e dominar a complexidade."

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Posted

É algo que devia ser prática corrente em todas as linguagens.

Muitas linguagens definem vários tipos de dados inteiros, cada um com o tamanho em bits bem definido, independentemente da arquitectura do compilador. Assim, eu posso pegar num ficheiro binário de inteiros criado num ambiente de 64 bits e abri-lo num ambiente de 32 bits sem problemas.

Não conheço a fundo a realidade do C neste aspecto, não trabalho com ele há muito tempo. No entanto, segundo percebi, é preciso cuidados redobrados nesta questão (para variar 😛 ).

Knowledge is free!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.