为变量赋值

时间:2010-03-02 22:54:26

标签: c

如果我想将二进制转换为十进制,我是否可以这样做:

假设:

newState[i-2] = 0,
newState[i-1] = 0,
newState[i] = 1

binary = newState[i-2], newState[i-1], newState[i]; // but if I did this, bin = 0, not 001.

我想这样做,所以我可以将二进制文件传递给另一个方法转换为十进制。

3 个答案:

答案 0 :(得分:1)

你可以使用bit twiddling(假设newState[N]为0或1):

binary = (newState[i-2] << 2) |
         (newState[i-1] << 1) |
         (newState[i]);

答案 1 :(得分:1)

你的问题有点不清楚。你究竟拥有什么?你有一个数组,其元素包含你的值的各个位吗?然后你需要从那些位中组合实际值,比如

bit[0] = 0;
bit[1] = 0;
bit[2] = 1;
unsigned int value = (bit[0]) | (bit[1]<<1) | (bit[2]<<2);

或者您是否有想要显示为二进制的值?然后,您需要通过提取单个位并显示适当的字符,将值从值转换为二进制表示。遗憾的是,没有二进制表示修饰符可用于使用格式字符串的标准函数(因为%x是十六进制字符串)。

或者您是否以二进制格式表示值的字符串表示?在这种情况下,您可能需要查看strtoul,它可以将值的字符串表示形式转换为数字基数范围的值,包括基数2.

通常,C中的数字不具有二进制,十六进制或任何格式。数字是一个数字,它所拥有的唯一格式(除了在真实机器上的表示)只是它的长度,无论是有符号还是无符号(我在这里留下浮点数)。 “二进制”,“十六进制”,“十进制”等仅是读者 - 即人类 - 具有相同值的表示。无论表示如何,机器上的值都完全相同。

binary = newState[i-2], newState[i-1], newState[i]; // but if I did this, bin = 0, not 001.

这是一个使用comma operator的表达式。您无法连接C中的值或字符串。

答案 2 :(得分:0)

如果要保存二进制值数组,可以使用int。所以你自动得到这个号码。获得价值也很容易打赌,你打电话给(x & (1 << i))