繁体   English   中英

如何在32位处理器上使用一个有符号整数和一个无符号整数来生成带符号的64位整数

[英]How to make signed 64 bit integer using one signed integer and one unsigned integer on 32 bit processor

在具有32位编译器的32位处理器上,我想使用每个有符号和无符号整数之一来生成64位有符号整数。 不使用任何预定义的宏或类型。

32位编译器将为您处理64位数字。 所以你不太可能真的需要这个。 但我会咬人。 从表面上看,这是一个非常简单的问题。

#include <stdint.h>

static inline int64_t make_int64(uint32_t low, int32_t high) {
    return (int64_t)((uint64_t)high << 32) | low;
}

static inline void split_int64(int64_t value, uint32_t *low, int32_t *high) {
    *low = value & 0xFFFFFFFF;
    *high = (int32_t)((uint32_t)(value >> 32));
}

但它总是棘手/危险混合有符号和无符号整数。 手动构造int还需要您了解处理器如何格式化它们。 我们假设它的2s赞美小端。

如果您完整地描述了您的要求,将会很有帮助。 例如,上面的示例make_int64(0,-1)= -4294967296但是make_int64(1,-1)= -4294967295。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM