2011-09-05 34 views
1

,所以我有这个功能,在C返回二进制表示:如何制作一个采用二进制参数的函数?

long int int2bin(int d) 
{ 
    int rem, pow = 1; 
    long int b = 0; 
    while(d > 0) 
    { 
     rem = d % 2 ; 
     b += (pow * rem); 
     d /= 2; 
     pow *= 10; 
    } 

    return b; 
} 
从这个

,所以我在想,我怎么可能去有bin2int()函数:

long int bin2int(bin b); 

,你会使用这样的:

bin2int(10011); 

,我可以这样

printf("%i\n", bin2int(10011)); 

中得到19

+2

将二进制表示为字符串不是更好吗? – quasiverse

+0

可能是的。我只是一般。我猜想将它表示为一个字符串将是除了制作自定义类型之外的唯一方法吗? – scruff

+0

请参阅[我可以在C或C++中使用二进制文字](http://stackoverflow.com/questions/2611764/can-i-use-a-binary-literal-in-c-or-c)。 – eran

回答

2

与分别10 S和2只需更换2 S和10在你的函数。

+0

哈哈。完善。很简单!辉煌。 – scruff

0

在伪码:

int result = 0; 
int ci = 1; 
string s = stringof(10011).reverse(); 
for(int z=0; z < s.length; z++,ci = ci * 2) 
{ 
    if(s[z] == '1') 
     result += ci; 
} 
1

二进制,十六进制和十进制只是代表相同数量的不同方式。例如,所有这些表示等同于相同 - 十进制中的27 =十六进制中的0x1b =二进制中的0b11011。

您可以使用任何格式指定数字作为函数的参数,该函数需要一个数字(int,unsigned int,甚至char等)。

例如,要打印您的二进制数字,您可以执行printf("%i\n", 0b10011)这会给出数字19.您可以将语句编写为printf("%i\n", 19)(十进制)或printf("%i\n", 0x13)(十六进制)。

+1

'0b10011'不是标准C.一些编译器支持它作为扩展。 – interjay

+0

你知道哪些编译器?即时通讯使用MSVC(并不支持它,至少不是默认情况下)。 – scruff

+0

@interjay谢谢。我也这么想。我记得很久以前看到使用宏B8(1011),B16(10001000)来定义二进制数的代码。但是现在大多数编译器似乎都支持0b符号吗?或者是海湾合作委员会的例外 – arunkumar

相关问题