Programar em C/Tipos de dados: diferenças entre revisões

[edição verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
He7d3r.bot (discussão | contribs)
Atualizando a categoria do livro, com AutoCat (detalhes). utilizando AWB
Abacaxi (discussão | contribs)
Sem resumo de edição
Linha 1:
{{reciclagem}}
 
== Tipos de memória: ==
 
Existem 3 tipos principais de locais de memória no computador:
*'''The central processing unit (CPU) – cache memory'''
 
**A CPU para além da coordenação das operações do computador tem um tipo de memória que se chama Cache memory. É nesta memória existe um segmento a que se dá o nome de register, que é usada frequentemente para guardar as instruções e dados mais frequentes.
* '''The central processing unit (CPU) – cache memory'''
**A CPU pode aceder a esta memória muito rapidamente
** A CPU para além da coordenação das operações do computador tem um tipo de memória que se chama Cache memory. É nesta memória existe um segmento a que se dá o nome de register, que é usada frequentemente para guardar as instruções e dados mais frequentes.
**No entanto não se consegue guardar muita memória, ie, muitos dados, ela é pequena daí se usar o RAM
** A CPU pode aceder a esta memória muito rapidamente
**A memória é temporária (as instruções e dados são perdidos na ausência de energia)
** No entanto não se consegue guardar muita memória, ie, muitos dados, ela é pequena daí se usar o RAM
*'''Random access memory (RAM)'''
** A memória é temporária (as instruções e dados são perdidos na ausência de energia)
**O cpu consegue aceder aos dados do ram quase tão rapidamente como ao cache.
 
**A memória ram é maior do que a cache, ie, consegue-se guardar mais dados.
 
**No entanto a memória é temporária (as instruções e dados são perdidos na ausência de energia)
* '''Random access memory (RAM)'''
*'''Persistent storage'''
** O cpu consegue aceder aos dados do ram quase tão rapidamente como ao cache.
**Chama-se a esta memória persistente porque ela permanece mesmo após ausência de energia, ie, se desligarmos da corrente e a voltarmos a ligar conseguimos aceder novamente aos dados.
** A memória ram é maior do que a cache, ie, consegue-se guardar mais dados.
**Exemplos são o hard drive, floppy disk, zip disk, optical drive...
** No entanto a memória é temporária (as instruções e dados são perdidos na ausência de energia)
**Têm mais capacidade do que o ram e o cache, ie, conseguem guardar mais informação
 
**No entanto um programa de computador não consegue executar instruções localizadas na persistent storage. os dados e instruções têm de ser loaded para o ram.
 
* '''Persistent storage'''
** Chama-se a esta memória persistente porque ela permanece mesmo após ausência de energia, ie, se desligarmos da corrente e a voltarmos a ligar conseguimos aceder novamente aos dados.
** Exemplos são o hard drive, floppy disk, zip disk, optical drive...
** Têm mais capacidade do que o ram e o cache, ie, conseguem guardar mais informação
** No entanto um programa de computador não consegue executar instruções localizadas na persistent storage. os dados e instruções têm de ser loaded para o ram.
por isso geralmente se fala, ie, se focaliza a conversa da memoria sobre o RAM, e não tanto nos outros tipos de memória
 
*Ainda temos os conceitos de:
** Heap
** Buffer
** RegisterRegistrador. ContemContém dados específicos para arithmetic and logic Unit (ALU).
Para não entrar em extremos detalhes, antes do tempo, vamos assumir que estamos sempre a trabalhar em RAM, até algo em contrário. Além de que até é bastante verdade, pois todos os dados passam por ela.
 
16-bit CPU pode processar 16 bits ou 2 bytes ao mesmo tempo. um 64-bit CPU pode processar 8 bytes ao mesmo tempo.
16-bit CPU pode processar 16 bits ou 2 bytes ao mesmo tempo. Um 64-bit CPU pode processar 8 bytes ao mesmo tempo.
 
== Explicando Bits e Bytes ==
Linha 60 ⟶ 54:
Temos o char que é um caracteres da tabela ASCII, que ocupa um byte, logo temos 256 combinações. Este nº de combinações dá para termos todo o alfabeto, minúsculas e maiúsculas, os algarismos de 0 a 9 e todas as marcas de pontuação tipo :.;!?, etc
 
== Números inteiros ==
 
 
== Números Inteiros ==
 
Mas agora observem o ponto: com a tipologia char apenas podemos expressar dois dígitos com dois bytes certo. (cada byte-um digito(numero))
Mas se dissermos que aqueles 2 bytes são ints. já poderemos utilizar as 65 536 combinações pois 2 bytes -16bits- temos 2162 elevado a 16 = 65 536 e isso dar-nos-ia esses números todos.
 
Assim se quisermos apenas os positivos com o zero temos de [0, 65535]
Linha 94 ⟶ 86:
|}
 
'''Pergunta''': porque é que existe o long, se o intervalo é exactamente igual ao int?
*Porque está se baseando em computadores mais antigos que só conseguiam atingir até 32 bits (4 bytes). Atualmente os computadores domésticos já tem 64 bits e o int fica então com 32 e o long int com 64 (8 bytes).
 
== Números de ponto flutuante ==
 
Os números de ponto flutuante são uma tentativa para guardar valores reais e tipo os fraccionários. Ao contrário dos números reais, os números representáveis pelo hardware são finitos.
 
A maneira como os tipos de ponto flutuante são armazenados é abstrata para o programador, entretanto, o hardware segue o padrão IEEE 754(Standard for Floating-Point Arithmetic).
 
 
'''Pergunta''': Como é que os números de ponto flutuantes são armazenados? e nesse caso como fazer para os fraccionários infinitos?
 
'''Pergunta''': porque é que existe o long, se o intervalo é exactamente igual ao int?
 
Porque está se baseando em computadores mais antigos que só conseguiam atingir até 32 bits (4 bytes). Atualmente os computadores domésticos já tem 64 bits e o int fica então com 32 e o long int com 64 (8 bytes).
 
== Floating Numbers ==
 
Os floating numbers são uma tentativa para guardar valores reais, tipo os fraccionários finitos e infinitos
Não consegui perceber como é que os floating numbers são armazenados.
se é como um número (e aí como é feito a virgula)
ou se é tipo fracção de 2 inteiros
ou ainda se é outro sistema: tipo
 
Pergunta: como é que os floating numbers são armazenados? e nesse caso como fazer para os fraccionários infinitos?
Table 2-3: Floating-point Number Data Types, Sizes, and Ranges
 
Linha 121 ⟶ 106:
|-
| double || 8 || ±1.7E-308 to ±1.7E308
|-
| long || 10 || ±3.4E-4932 to ±3.4E4932
|}
 
 
O armazenamento é feito usando notação científica binária.
 
 
 
Uma outra hipótese é o uso da notação cientifica ou ainda com a notação e notation
Table 2-4: Scientific and E Notation Representations of Floating Point Values
 
Linha 141 ⟶ 122:
| 1,200,000,000 || 1.2 x 109 || 1.2E9
|}
 
 
 
Linha 149 ⟶ 129:
Tem o tamanho de um byte e tem apenas dois valores 0 e 1 que corresponde a true e false.
 
'''Pergunta''': porquêPor que guardar um bool num byte quando se pode utilizar apenas um bit?
*A razão é que o computador usa no mínimo o byte não o bit.
 
 
 
 
 
 
Quando queremos guardar um valor o sistema operativo vai reservar uma quantidade x de bytes, numa posição dada na memória.
A quantidade reservada vai depender do que declararmos, ie da tipologia de dados, que queremos guardar. Recorde-se que gravar o valor 5 é diferente de ter 5,67. Por isso é natural que ocupe mais espaço em termos de memória. (é natural que quanto maior for o número seja necessário mais combinações de bits e bytes).
Portanto vou necessitar de apenas 1 byte para guardar uma letra que denominamos de char .
Vou necessitar 4 bytes para poder ter de 0 to 4294967295.
 
 
== Todos ==
Linha 189 ⟶ 163:
 
Estes são na verdade os tipos de dados fundamentais. Nós vamos criar mais e vamos criar nós próprios, mas serão sempre baseados nestes.
 
 
 
 
 
Linha 197 ⟶ 168:
Dito de outra forma, tínhamos uma única fita composta de bits. Agora temos muitas fitinhas de bytes. como esse bytes estão ordenados, podemos logo ter um nº de identificação para cada byte – temos então as addesses.
 
== AddressesEndereços ==
 
Os vários locais na memória são identificados por um address, que tem uma lógica sequencial numerada. São necessários 16 bits para guardar o endereço de um byte. dito de outra forma são necessários 2 bytes para guardar a morada de um byte.
será isto verdade?!! isso quer dizer que se guardarmos os endereços de todos os bytes, só temos 1/3 da memória disponível para guardar valores. Bem isto é um pouco estanho, mas repare-se que apenas vamos guardar os addresses das variáveis reservadas. Depois as variáveis nem sempre são de 1 byte, por isso apenas iremos guardar o endereço do primeiro byte e não de todos. por fim faz sentido guardar o endereço de outro endereço?
Os endereços de memória (addresses) são normalmente expressos em linguagem hexadecimal (base 16, utilizam os 10 algarismos mais as 6 primeiras letras – de a a f - do alfabeto para fazerem as 16). ()
 
'''Pergunta''': Quando tivermos mais do que 216256 bytes acrescenta-se um outro byte?
*Sim. Com dois bytes o número de combinações é 256*256.
 
'''pergunta''': Qual a razão do computador usar apenas bytes como medida mínima? Será que não seria possível utilizar 7 bits ou 5 bits?
 
*Não é possível pelo fato do computador so intender 0 e 1 então no caso é impossível se ter um número ímpar de bits porque tudo tem que ter o 0 e o 1 por isso que tudo na informática evolui multiplicando-se por 2 (32, 64, 256, 512)
'''pergunta''': qual a razão do computador usar apenas bytes como medida mínima? Será que não seria possível utilizar 7 bits ou 5 bits?
Não é possível pelo fato do computador so intender 0 e 1 então no caso é impossível se ter um número impar de bits porque tudo tem que ter o 0 e o 1 por isso que tudo na informática evolui multiplicando-se por 2 (32, 64, 256, 512)
 
== Void ==
Void significa ausência. Nas linguagens de programação derivadas de C, que inclui C++, Java e D, '''void''' é uma palavra-chave usada para identificar que uma função retorna nenhum resultado através de "return". Ela é colocada no lugar de tipo de retorno da função. Em variações do C, '''void''' é usado também para indicar que uma função não recebe argumentos.
 
há mais uma nota que gostaria de fazer que é sobre a tipologia void! void significa ausência. que não tem tipo.
 
há uma polémica muito grande sobre o uso do void como tipologia de retorno da função main(). acontece que o void pode ser realemente usado como uma tipologia normal excepto no main(). como o main() é uma função especial é exigido a esta função que retorne sempre um valor.
 
há mais um ponto: o void não significa que a variavel não tem qualquer tipologia mas antes diz que não quero saber sobre a tipologia da variavel. o que é diferente
 
ainda não percebi bem a vantagem do void mas.
 
'''Pergunta''': o que é realmente o void. Uma explicação convincente
'''Void é um programa que foi feito para não retornar absolutamente nada so foi feito para executar comandos.
'''
 
== Perguntas ==
#'''Pergunta''': porque é que existe o long, se o intervalo é exactamente igual ao int?
#'''Pergunta''': Quando tivermos mais do que 216 bytes acrescenta-se um outro byte?
#'''pergunta''': qual a razão do computador usar apenas bytes como medida mínima? Será que não seria possível utilizar 7 bits ou 5 bits?
#'''Pergunta''': porquê guardar um bool num byte quando se pode utilizar apenas um bit?
A razão é que o computador usa no mínimo o byte não o bit.
 
#'''Pergunta''': o que é realmente o void. Uma explicação convincente
 
{{AutoCat}}