Gonkali Posted February 10, 2014 at 05:53 PM Report #544695 Posted February 10, 2014 at 05:53 PM (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 February 10, 2014 at 05:54 PM 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."
HappyHippyHippo Posted February 10, 2014 at 06:01 PM Report #544697 Posted February 10, 2014 at 06:01 PM 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 Portugol Plus
Flinger Posted February 10, 2014 at 06:11 PM Report #544703 Posted February 10, 2014 at 06:11 PM 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á 😛
Gonkali Posted February 11, 2014 at 09:43 AM Author Report #544794 Posted February 11, 2014 at 09:43 AM 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."
thoga31 Posted February 11, 2014 at 03:53 PM Report #544850 Posted February 11, 2014 at 03:53 PM É 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!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now