Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中处理值_C - Fatal编程技术网

在C语言中处理值

在C语言中处理值,c,C,好的,在学期间的休息时间,我在学习C。我在使用我从一个汇编类编写的旧项目,并将它们转换成C。我正在使用的程序接受一个整数,然后打印出2的comp,1的comp,负1的comp,负符号mag的int,hex,二进制值。到目前为止,我已经写了这个 #include <stdio.h> int main(int argc, char* argv[]) { int counter = 0, bit = 0; long int number, binVal, hexVal =

好的,在学期间的休息时间,我在学习C。我在使用我从一个汇编类编写的旧项目,并将它们转换成C。我正在使用的程序接受一个整数,然后打印出2的comp,1的comp,负1的comp,负符号mag的int,hex,二进制值。到目前为止,我已经写了这个

#include <stdio.h>
int main(int argc, char* argv[])
{
    int counter = 0, bit = 0;
    long int number, binVal, hexVal = 0, i = 1, remainder;

    printf("Enter an integer number: ");
    scanf("%ld", &number);

    printf("2's compliment:\t%ld\t", number);
    binVal == &number;
    while(binVal != 0)
    {
        remainder = binVal % 10;
        hexVal = hexVal + remainder * i;
        i = i * 2;
        binVal = binVal / 10;
    }

    printf("%lX\t", hexVal);

    for (counter = 31; counter >= 0; counter--)
    {
        bit = number >> counter;
        printf("%s",(bit & 1) ? "1" : "0");
    }

    printf("\n");

    return 0;
}
#包括
int main(int argc,char*argv[])
{
int计数器=0,位=0;
长整数,binVal,hexVal=0,i=1,余数;
printf(“输入整数:”);
scanf(“%ld”、&number);
printf(“2的赞美:\t%ld\t”,数字);
binVal==&number;
while(binVal!=0)
{
余数=binVal%10;
hexVal=hexVal+余数*i;
i=i*2;
binVal=binVal/10;
}
printf(“%lX\t”,hexVal);
对于(计数器=31;计数器>=0;计数器--)
{
位=数字>>计数器;
printf(“%s”,(位&1)?“1”:“0”);
}
printf(“\n”);
返回0;
}

我的问题是。正如我所编码的,如果我输入值15,我会得到正确的32位二进制值,但我的十六进制值=7。如果输入1111,则得到正确的十六进制值F,但得到二进制值000000000000000 100001010111。现在我知道int值作为2的comp存储在内存中,但我不确定为什么我得到了错误的值。有人能解释一下我做错了什么吗

当使用printf
printf(“%lX\t”,hexVal)时你只需要通过
以10为基数,无需进行上一笔交易

这些代码行将二进制转换为10进制:

while(binVal != 0)
{
    remainder = binVal % 10;
    hexVal = hexVal + remainder * i;
    i = i * 2;
    binVal = binVal / 10;
}
这是你不想要的。 如果你想打印十六进制值,你可以调用

printf("%lX\t", number);
或者手动操作

#include <stdio.h>
int main(int argc, char* argv[])
{
    int counter = 0;
    long int number, remainder;

    printf("Enter an integer number: ");
    scanf("%ld", &number);
    printf("\n");

    printf("2's compliment:\t%ld\t\n", number);

    printf("0x");
    for (counter = 28; counter >= 0; counter-= 4)
    {
        remainder = (number >> counter) & 0xF;
        if (remainder < 10)
            printf("%d", remainder);
        else
            printf("%c", 'A' + remainder - 10);
    }

    printf("\n");

    for (counter = 31; counter >= 0; counter--)
    {
        printf("%d", (number >> counter) & 1);
    }

    printf("\n");

    return 0;
}
#包括
int main(int argc,char*argv[])
{
int计数器=0;
长整数,余数;
printf(“输入整数:”);
scanf(“%ld”、&number);
printf(“\n”);
printf(“2的赞美:\t%ld\t\n”,数字);
printf(“0x”);
用于(计数器=28;计数器>=0;计数器-=4)
{
余数=(数字>>计数器)&0xF;
如果(余数<10)
printf(“%d”,余数);
其他的
printf(“%c”,“A”+余数-10);
}
printf(“\n”);
对于(计数器=31;计数器>=0;计数器--)
{
printf(“%d”,(数字>>计数器)&1);
}
printf(“\n”);
返回0;
}

这行代码正确吗<代码>binVal==&number不,那是我在尝试。它应该是binVal=number;怀疑
binVal==&number是您想要的。可能您想要
binVal=number谢谢Richard,我已经更正了。所以您是以二进制还是以10为基数输入数字?谢谢,printf语句可以工作。但手动方式似乎与我以前遇到的问题相同。使用手动方式,如果输入15,结果为0x7777,则应为0x0F。我会更深入地了解这一点谢谢你的帮助我在ideone.com上用15检查了这段代码,输出是正确的:输入一个整数:2的赞美:15 0x0000000F 0000000000000000000000 1111是的,我是个白痴,在if语句中有错误的逻辑。我修好了!!再次感谢你,尼克@LD50没问题^_^