gpt4 book ai didi

c - 代码中的运行时错误

转载 作者:行者123 更新时间:2023-11-30 16:51:54 24 4
gpt4 key购买 nike

我需要编写以下函数:int64_t get_bits(int64_t val, uint bit_n, uint len);

其中 val - 64 位有符号整数,bit_n - val 中的位数(0 <= 位 <= 64), len - 位数 (0 < bit_n + len <= 64)。该函数应提取从 bit_n 开始的 len 位(从 0 开始计数)。提取的位应表示为 64 位有符号整数,该函数应返回。

这就是我得到的:

#include <inttypes.h>
#include <math.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>

int64_t get_bits(int64_t val, uint bit_n, uint len) {
uint64_t tmp = val;
tmp = tmp << (64 - bit_n - len);
val = tmp;
val = val >> (64 - len);
return val;
}

int main() {
printf("%" PRId64"\n", get_bits(1, 0, 1)); // -1 = OK
printf("%" PRId64"\n", get_bits(-1022, 1, 2)); // 1 => OK
printf("%" PRId64"\n", get_bits(65535, 9, 12)); // 127 => OK
return 0;
}

当我在我的计算机上测试它时,它工作正常(主要示例)。但是当我将其发送到测试系统时,它出现运行时错误。我认为这是因为定义了实现,与符号数字的移位有关。您能提供一些如何修复此错误的提示吗?

编译器选项:

 gcc    GNU C 6.3.0 -O2 -Wall -Werror -std=gnu11 -lm

最佳答案

不确定您在 bit_n 处提取 len 位的逻辑,我会用掩码来完成。

int64_t get_bits(int64_t val, uint bit_n, uint len) {

uint64_t mask;
mask = ((1 << len) - 1) << bit_n

return (val & mask);
}

关于c - 代码中的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41524857/

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