gpt4 book ai didi

c - 宽度不兼容的变量

转载 作者:太空宇宙 更新时间:2023-11-04 06:42:24 24 4
gpt4 key购买 nike

我正在使用以下代码来简化将大值分配给内存中特定位置的过程:

int buffer_address =  virtual_to_physical(malloc(BUFFER_SIZE));
unsigned long int ring_slot = buffer_address << 32 | BUFFER_SIZE;

但是,编译器会提示“警告:左移计数 >= 类型宽度”。但是 C 中的 unsigned long int 是 64 位,因此将 int(32 位)向左移动 32 位应该产生 64 位值,因此编译器不应该提示。但确实如此。

是否有明显的遗漏,或者是否有简单的解决方法?

最佳答案

unsigned long int不一定是 64 位,但为简单起见,我们假设它是。

buffer_address类型为 int . buffer_address 上没有任何“高级”类型的任何表达式应该返回 int。从而buffer_address << 32应该返回 int,而不是 unsigned long .因此编译器会报错。

这应该可以解决您的问题:

unsigned long ring_slot = ((unsigned long) buffer_address) << 32 | BUFFER_SIZE;

请注意,一个 unsigned long 不一定必须是 64 位,这取决于实现。改用这个:

#include <stdint.h> // introduced in C99

uint64_t ring_slot = ((uint64_t) buffer_address) << 32 | BUFFER_SIZE;

关于c - 宽度不兼容的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5930972/

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