c - 如何将int数组转换为bin int?
问题描述
我得到了数组填充的零和一,如何将其转换为 int;
出自:{0,0,0,0,0,0,0,1}
至此0b00000001
解决方案
您可以按如下方式分解十进制数:
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];
随意使用循环。
推荐阅读
- c# - 覆盖设备管理员应用程序 xamarin
- forms - 停止 LaravelCollective 表单模型绑定被 GET 变量覆盖?
- twitter-bootstrap - 具有不同高度移动与桌面模式的引导推/拉柱
- php - Codeigniter 数据库错误处理,试图涵盖我所有可能的场景
- python - 如何在 Inception v3 中解冻层以进行迁移学习?
- windows - 我应该使用哪种计时方法来测量时间变化
- python - 使用补充列从 numpy 数组初始化 DataFrame
- python - Kivy:分散内部分散
- json - 如何验证 JSON 模式中的属性数量
- javascript - parseInt 数组返回未定义 - javascript