程序不给十六进制值?

时间:2018-03-17 18:08:40

标签: c math binary char hex

我的程序为Decimal提供正确的值,但是我使用char来表示Hex的值

有人可以看到我的代码并告诉我为什么我的输出只是一个"?" (附上我的输出图像)

我知道你可以添加char值。

这是我的代码。请不要试图改变我的整个代码,说明我正在做的是"更长的方式"。

注意我现在只测试HexVal1,因为它只考虑前4位。

程序应该做的是取前4位二进制并抛出一个十六进制字符。

#include <math.h>
#include <stdio.h>

int main()
{

    int bit1,bit2,bit3,bit4,bit5,bit6,bit7,bit8;
    int dec1,dec2,dec3,dec4,dec5,dec6,dec7,dec8;
    char hex1,hex2,hex3,hex4,hex5,hex6,hex7,hex8;
    int BinVal;
    char HexVal1;
    char HexVal2;

    printf("Please enter the first bit(0 or 1): ");
    scanf("%d",&bit1);
    printf("Please enter the second bi(0 or 1): ");
    scanf("%d",&bit2);  
    printf("Please enter the third bit(0 or 1): ");
    scanf("%d",&bit3);  
    printf("Please enter the fourth bit(0 or 1): ");
    scanf("%d",&bit4);  
    printf("Please enter the fifth bit(0 or 1): ");
    scanf("%d",&bit5);  
    printf("Please enter the sixth bit(0 or 1): ");
    scanf("%d",&bit6);  
    printf("Please enter the seventh bit(0 or 1): ");
    scanf("%d",&bit7);
    printf("Please enter the eigth bit:(0 or 1): ");
    scanf("%d",&bit8);


    if(bit1==1){
        dec1=1;
        hex1='1';
        }

    else{
    dec1=0;
    hex1='0';
    }

        if(bit2==1){
        dec2=2;
        hex2='2';
        }

    else{
    dec2=0;
    hex2='0';
    }

        if(bit3==1){
        dec3=4;
        hex3='4';
        }

    else{
    dec3=0;
    hex3='0';
    }

        if(bit4==1){
        dec4=8;
        hex4='8';
        }

    else{
    dec4=0;
    hex4='0';
    }

        if(bit5==1){
        dec5=16;
        hex5='16';
        }

    else{
    dec5=0;
    hex5='0';
    }

        if(bit6==1){
        dec6=32;
        hex6='32';
        }

    else{
    dec6=0;
    hex6='0';
    }

        if(bit7==1){
        dec7=64;
        hex7='64';
        }

    else{
    dec7=0;
    hex7='0';
    }

        if(bit8==1){
        dec8=128;
        hex8='128';
        }

    else{
    dec8=0;
    hex8='0';   
       }






    BinVal=dec1+dec2+dec3+dec4+dec5+dec6+dec7+dec8;
    printf("Binary value for your decimal number is %d",BinVal);

    HexVal1=sizeof(hex1)+sizeof(hex2)+sizeof(hex3)+sizeof(hex4);

    if(HexVal1==15){
        HexVal1='F';
    }

    else if (HexVal1==14){
     HexVal1='E';
    }

    else if (HexVal1==13){

    HexVal1='D';
    }

    else if(HexVal1==12){

    HexVal1='C';
    }

    else if(HexVal1==11){

    HexVal1='B';
    }

    else if(HexVal1==10){
    HexVal1='A';
    }


    printf("\nHex Val for first 4 bits is %c", HexVal1);

    return 0;

}

输出如下

Please enter the first bit(0 or 1): 1
Please enter the second bi(0 or 1): 0
Please enter the third bit(0 or 1): 0
Please enter the fourth bit(0 or 1): 1
Please enter the fifth bit(0 or 1): 1
Please enter the sixth bit(0 or 1): 1
Please enter the seventh bit(0 or 1): 1
Please enter the eigth bit:(0 or 1): 1
Binary value for your decimal number is 249
Hex Val for first 4 bits is 

1 个答案:

答案 0 :(得分:0)

无需重写整个事情。做“漫长的道路”作为学习练习是很有价值的。您可以稍后进行优化。但是,由于存在一些误解,您的代码无法正常工作。看看这些主题:

因此,为了使代码工作的最小变化,您不希望将这些单引号值分配给“十六进制”变量;你只想分配不带引号的数值。 (另外,您至少应该使用unsigned char来确保它们的值为128.)

unsigned char hex1,... /* etc. */

hex8=128;

然后你可以添加它们:

unsigned char HexVal1, HexVal2;
HexVal1 = hex1 + hex2 + hex3 + hex4;
HexVal2 = (hex5 + hex6 + hex7 + hex8) / 16;

这将使HexVal1和HexVal2的范围为0到15,这是您所期望的。 (与HexVal1的值始终为4的原始代码不同。)

然后,您最后的转换也存在问题。您正在将数字值10-15更改为字符'A' - 'F',这很好......但您也必须转换较低的值! 4'4'的值不同。 (这就是你的程序输出问号的原因.HexVal1包含值4,它不是可打印的字符。请参阅ASCII character set。)

你可以做很多很多事情来进一步改进,但是如果你做了那些最小的修补,你的代码应该可以工作。