gellox
(usa Outra)
Enviado em 25/01/2013 - 07:39h
Pessoal, abaixo segue o código e sua saída. Sei que o valor nessas duas variáveis deverá me retornar -10000, só não estou conseguindo chegar a esse valor, além do complemento de dois tem o big endiam.
Para números positivos resolvi da seguinte forma:
>>>>>>>>>>>Código funcionando para números positivos<<<<<<<<<<<
int main()
{
arq = fopen("arq.bin", "rb");
if (arq==NULL)
{
printf("Erro ao abrir arquivo!!!\n");
system("pause");
exit(1);
}
a=fgetc(arq);
b=fgetc(arq);
total=(a*256)+b;
printf("%d",total);
}
Só que para valores negativos isso não funciona, então fiz um código apenas para mostrar o bits (de cada byte) e o valor em decimal(de cada byte).
Primeiro coloquei a saída e depois o código, preciso de ajuda para chegar ao valor -10000:
>>>>>>>>>>>>>>>Resultado<<<<<<<<<<<<
BYTE 1:
binario 11011000
decimal 216
BYTE 2:
binario 11110000
decimal 240
>>>>>>>>>>>>>>>código<<<<<<<<<<<<<
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>
int bit1, bit2, bit3, bit4, bit5, bit6, bit7, bit8;
unsigned char a, b;
FILE *arq;
int main()
{
arq = fopen("arq.bin", "rb");
if (arq==NULL)
{
printf("Erro ao abrir arquivo!!!\n");
system("pause");
exit(1);
}
//1° byte
a=fgetc(arq);
bit8 = (a >> 7) & 1; //10000000
bit7 = (a >> 6) & 1; //01000000
bit6 = (a >> 5) & 1; //00100000
bit5 = (a >> 4) & 1; //00010000
bit4 = (a >> 3) & 1; //00001000
bit3 = (a >> 2) & 1; //00000100
bit2 = (a >> 1) & 1; //00000010
bit1 = (a) & 1; //00000001
printf("BYTE 1:\binario %d%d%d%d%d%d%d%d\n", bit8,bit7,bit6,bit5,bit4,bit3,bit2,bit1);
printf ("decimal %d\n\n",a);
//2°byte
b=fgetc(arq);
bit8 = (b >> 7) & 1; //10000000
bit7 = (b >> 6) & 1; //01000000
bit6 = (b >> 5) & 1; //00100000
bit5 = (b >> 4) & 1; //00010000
bit4 = (b >> 3) & 1; //00001000
bit3 = (b >> 2) & 1; //00000100
bit2 = (b >> 1) & 1; //00000010
bit1 = (b) & 1; //00000001
printf("BYTE 2:\binario %d%d%d%d%d%d%d%d\n", bit8,bit7,bit6,bit5,bit4,bit3,bit2,bit1);
printf ("decimal %d\n",b);
getch ();
}