c语言中的二进制到十进制算法给出了奇怪的结果

c语言中的二进制到十进制算法给出了奇怪的结果,c,binary,C,Binary,嗨,我对c相当陌生,但对于我正在编写的程序,我需要将二进制字符串转换为十进制数。这是我目前的代码: int BinaryToInt(char *binaryString) { int decimal = 0; int len = strlen(binaryString); for(int i = 0; i < len; i++) { if(binaryString[i] == '1') decimal += 2^((

嗨,我对c相当陌生,但对于我正在编写的程序,我需要将二进制字符串转换为十进制数。这是我目前的代码:

int BinaryToInt(char *binaryString)
{
    int decimal = 0;
    int len = strlen(binaryString);
    for(int i = 0; i < len; i++)
    {

        if(binaryString[i] == '1')
            decimal += 2^((len - 1) - i);
        printf("i is %i and dec is %i and the char is %c but the length is %i\n", i, decimal, binaryString[i], len);
    }
    return decimal;
}

int main(int argc, char **argv)
{
    printf("%i", BinaryToInt("10000000"));
}
我不明白为什么这不起作用,非常感谢所有的帮助。提前谢谢


Ps:我已经习惯java了,所以现在C让我哭了,
^
运算符不是用于求幂的,而是按位异或运算符


如果要将数字提高到2的幂,请使用左移位运算符
^
运算符不用于求幂,而是按位异或运算符


如果你想将一个数字提高到2的幂,使用左移位运算符
,技巧与任何数字基数相同:对于每个输入的数字,将累加器乘以数字基数,然后将数字相加

#include <stdio.h>
#include <string.h>

int BinaryToInt(char *binaryString)
{
    int decimal = 0;
    int len = strlen(binaryString);
    for(int i = 0; i < len; i++) {
        decimal = decimal * 2 + binaryString[i] - '0';
    }
    return decimal;
}

int main(void)
{
    printf("%d", BinaryToInt("10000000"));
    return 0;
}

技巧与任何数字基数相同:对于每个输入的数字,将累加器乘以数字基数,然后将数字相加

#include <stdio.h>
#include <string.h>

int BinaryToInt(char *binaryString)
{
    int decimal = 0;
    int len = strlen(binaryString);
    for(int i = 0; i < len; i++) {
        decimal = decimal * 2 + binaryString[i] - '0';
    }
    return decimal;
}

int main(void)
{
    printf("%d", BinaryToInt("10000000"));
    return 0;
}

我不确定+binaryString[I]是如何工作的。c是否自动将其转换为整数?
char
类型在计算前提升为
int
'0'
被减去为ASCII或EBCDIC或其他字符编码调整。数字编码要求是连续的。如果写为
decimal*2+(binaryString[i]-“0”)
您使用什么编译器和标准,这一点可能会更清楚?因为使用gcc c99运行此命令会给我64作为答案。请检查您的代码:您是否将
BinaryToInt(“1000000”)
?我不确定+binaryString[I]是如何工作的。c是否自动将其转换为整数?
char
类型在计算前提升为
int
'0'
被减去为ASCII或EBCDIC或其他字符编码调整。数字编码要求是连续的。如果写为
decimal*2+(binaryString[i]-“0”)
您使用什么编译器和标准,这一点可能会更清楚?因为使用gcc c99运行此命令会得到64作为答案请检查您的代码:您是否将
BinaryToInt(“1000000”)
#include <stdio.h>
#include <string.h>

int BinaryToInt(char *binaryString)
{
    int decimal = 0;
    int len = strlen(binaryString);
    for(int i = 0; i < len; i++) {
        decimal = decimal * 2 + binaryString[i] - '0';
    }
    return decimal;
}

int main(void)
{
    printf("%d", BinaryToInt("10000000"));
    return 0;
}
128