gpt4 book ai didi

c - C 中的移位运算符

转载 作者:行者123 更新时间:2023-11-30 19:58:59 25 4
gpt4 key购买 nike

我有一个长度为64的二进制数组。我想在C中找到相应的整数。我有写了下面的代码。

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
main()
{

int A[64]={1, 1, 1, 1, 1,1, 1, 1, 1, 1,1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1,1,1,1},i;


long long int B=0;

for(i=0;i<64;i++)
B=B+A[i]*pow(2,63-i);

printf("B=%llu\n",B);

}

结果没问题。但为了提高效率,我想要移位运算符 (<<),而不是 pow 函数。我怎样才能做到这一点?

最佳答案

#include <inttypes.h>
#include <stdio.h>
#include <stdint.h>

int main(void)
{
int A[64] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};

uint64_t B = 0;

for (int i = 0; i < 64; ++i)
B |= (uint64_t) A[i] << 63-i;

printf("B = %" PRIu64 ".\n", B);

return 0;
}

注释:

  • B 的类型已更改为无符号,尤其是 uint64_t,以避免溢出。
  • 为了表达清晰和精确,使用了uint64_t而不是unsigned long long
  • printf 中的格式说明符与 B 的类型匹配。

关于c - C 中的移位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17011753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com