Conversao de dois numeros para binario
#1
Publicado 05 de Abril de 2012 - 13:56
#2
Publicado 05 de Abril de 2012 - 14:01
1) se o número não couber nos caracteres especificados
2) numero negativo?
3) numero com virgula, por exemplo PI
4) o procedimento devolve alguma coisa?
5) a apresentacao é alinhada à esquerda, à direita ... com espaços, com zeros?
#3
Publicado 05 de Abril de 2012 - 14:08
pmg, em 05 de Abril de 2012 - 14:01, disse:
1) se o número não couber nos caracteres especificados
2) numero negativo?
3) numero com virgula, por exemplo PI
4) o procedimento devolve alguma coisa?
5) a apresentacao é alinhada à esquerda, à direita ... com espaços, com zeros?
Para simplificar o numero é inteiro,em relação ao numero caber ou nao isso tem de depender de o valor de digitos maximo introduzido pelo utilizador. O procedimento nao devolve nada apenas escreve no ecra o numero em binario com o numero de bits definido pelo utilizador. A apresentação pode ser alinha a esquerda.
#4
Publicado 05 de Abril de 2012 - 14:18
Código (C):
O que é que querias que aparecesse no ecra?
Se afinal não pode ser negativo ... imagina isto
Código (C):
Podes aproveitar a minha sugestão acima e chamar ao teu procedimento o mesmo que eu chamei ao meu.
#5
Publicado 05 de Abril de 2012 - 14:22
pmg, em 05 de Abril de 2012 - 14:18, disse:
Código (C):
O que é que querias que aparecesse no ecra?
Se afinal não pode ser negativo ... imagina isto
Código (C):
Podes aproveitar a minha sugestão acima e chamar ao teu procedimento o mesmo que eu chamei ao meu.
tem que aparecer no ecra os ultimos 5 bits menos significativos.
#6
Publicado 05 de Abril de 2012 - 15:19
Código (C):
int mask, iter;
for(iter = 0, mask = 1; iter < sizeof(int) && iter < n_bits; iter++, mask << 1)
printf("%d", (value & mask) != 0);
printf("\n");
}
PS : agora vi que estou a apresentar do menos significativo para o mais significativo .... deverás alterar a ordem de apresentação
#7
Publicado 20 de Abril de 2012 - 20:15
#include<stdlib.h>
void converte(unsigned int num, int n_bits) {
int mascara=0;
int and=0;
int aux=0;
mascara= 1 << (n_bits-1);
while(n_bits>0){
and= num & mascara;
if (and==0){
printf("0");
}else{
printf("1");
}
aux=num<<1;
n_bits--;
}
}
int main() {
int numero=0;
int n_bits=0;
printf("Introduza o numero a converter e o numero de bits que quer\n");
scanf("%d %d", &numero, &n_bits);
converte(numero,n_bits);
exit(0);
}
So que a função nao esta a converter os numeros correctamente
#8
Publicado 20 de Abril de 2012 - 20:29
2. A variável 'aux', com o seu código associado, não serve para nada.
3. O código que inicializa a variável 'and' pode ser metido dentro do 'if' onde ela é testada, tornando essa variável também inútil.
4. Faz um 'right shift' (>>) da máscara no final do ciclo. Em vez de 'aux = num << 1;' faz 'mascara >>= 1;'.
#9
Publicado 20 de Abril de 2012 - 20:54
bsccara, em 20 de Abril de 2012 - 20:29, disse:
2. A variável 'aux', com o seu código associado, não serve para nada.
3. O código que inicializa a variável 'and' pode ser metido dentro do 'if' onde ela é testada, tornando essa variável também inútil.
4. Faz um 'right shift' (>>) da máscara no final do ciclo. Em vez de 'aux = num << 1;' faz 'mascara >>= 1;'.
Muito obrigado. O programa já funciona
#10
Publicado 20 de Abril de 2012 - 21:03
no entanto bastará apresentar um '1' ao início se for negativo ou '0' caso contrário
#11
Publicado 20 de Abril de 2012 - 21:38
HappyHippyHippo, em 20 de Abril de 2012 - 21:03, disse:
no entanto bastará apresentar um '1' ao início se for negativo ou '0' caso contrário
-Quero apresentar em complemento para 2. Eu aqui quando introduzo numeros negativos ele apresenta-me em complemento para 2 pqe?
#12
Publicado 20 de Abril de 2012 - 22:07
#13
Publicado 20 de Abril de 2012 - 22:08
bsccara, em 20 de Abril de 2012 - 22:07, disse:
ok.
Para converter para BCD como posso fazer? Separar os numeros em decimal e converter para binario? Se sim como posso separar os numeros em decimla?
#14
Publicado 20 de Abril de 2012 - 22:38
Código (ASM):
FBSTP valor_BCD
em que 'valor_inteiro' é uma posição de memória onde estaria guardado o valor a converter e 'valor_BCD' é outra posição que iria receber uma sequência BCD de 18 digitos, com sinal no bit mais significativo e 10 bytes no total. Mas isto já não tem nada a ver com C.
#15
Publicado 20 de Abril de 2012 - 23:49
bsccara, em 20 de Abril de 2012 - 22:38, disse:
Código (ASM):
FBSTP valor_BCD
em que 'valor_inteiro' é uma posição de memória onde estaria guardado o valor a converter e 'valor_BCD' é outra posição que iria receber uma sequência BCD de 18 digitos, com sinal no bit mais significativo e 10 bytes no total. Mas isto já não tem nada a ver com C.
O sprintf nao e para escrever numa string?
#16
Publicado 21 de Abril de 2012 - 02:12
Código (C):
...
}
void printPacketBCD(int number) {
int digit;
while(i != 0) {
digit = i % 10;
i /= 10;
printBinary(digit, 4);
}
}
#17
Publicado 21 de Abril de 2012 - 09:39
einstein, em 20 de Abril de 2012 - 23:49, disse:
Sim.
Usas o sprintf para converter um valor numa string
Código (C):
int valor = 8042;
sprintf(texto, "%d", valor); /* texto tem "8072" */
Depois convertes para BCD
Código (C):
unsigned char *pb = bcd;
char *pt = texto;
while (*texto) {
*pb = *pt - '0';
pb++;
pt++;
}
#18
Publicado 21 de Abril de 2012 - 11:58
HappyHippyHippo, em 21 de Abril de 2012 - 02:12, disse:
Código (C):
...
}
void printPacketBCD(int number) {
int digit;
while(i != 0) {
digit = i % 10;
i /= 10;
printBinary(digit, 4);
}
}
pmg, em 21 de Abril de 2012 - 09:39, disse:
Porque usas unsigned char? O que "char *pt=texto" , o que faz o *?
Sim.
Usas o sprintf para converter um valor numa string
Código (C):
int valor = 8042;
sprintf(texto, "%d", valor); /* texto tem "8072" */
Depois convertes para BCD
Código (C):
unsigned char *pb = bcd;
char *pt = texto;
while (*texto) {
*pb = *pt - '0';
pb++;
pt++;
}











