首页 > 解决方案 > 如何将int数组转换为bin int?

问题描述

我得到了数组填充的零和一,如何将其转换为 int;

出自:{0,0,0,0,0,0,0,1}
至此0b00000001

标签: cbinary

解决方案


您可以按如下方式分解十进制数:

456 10 = 4 * 10 2 + 5 * 10 1 + 6 * 10 0

二进制数相同

00000001 2 = 0 * 2 7 + ... + 0 * 2 1 + 1 * 2 0

您有效地从分解的形式开始。要从分解的位中取回整数,只需应用该公式即可。

i =
(a[0] * 0b10000000) +
(a[1] * 0b01000000) +
(a[2] * 0b00100000) +
(a[3] * 0b00010000) +
(a[4] * 0b00001000) +
(a[5] * 0b00000100) +
(a[6] * 0b00000010) +
(a[7] * 0b00000001);

请记住,乘以 2 的幂与移动该幂相同。而且由于加法永远不会产生进位,我们可以使用|而不是+. 所以我们可以将上面的内容写成如下:

i =
(a[0] << 7) |
(a[1] << 6) |
(a[2] << 5) |
(a[3] << 4) |
(a[4] << 3) |
(a[5] << 2) |
(a[6] << 1) |
(a[7] << 0);

或者如下:

i =              a[0];
i = ( i << 1 ) | a[1];
i = ( i << 1 ) | a[2];
i = ( i << 1 ) | a[3];
i = ( i << 1 ) | a[4];
i = ( i << 1 ) | a[5];
i = ( i << 1 ) | a[6];
i = ( i << 1 ) | a[7];

随意使用循环。


推荐阅读