一个人如何“拆分”,即long long类型,这样它的第一部分是long类型的变量,第二部分也是long类型的变量。
long long long_type = 0xaaaabbbbccccdddd;在第一个变量中,我希望得到long_type变量的前半部分(不管是哪边的),第二个变量是第二个变量,第二个变量是第二个变量。
发布于 2011-04-13 01:40:26
你的问题模棱两可。这取决于你说的“拆分”是什么意思。您可以拆分原始long long的值表示,也可以拆分long long的对象表示。
如果你想拆分数值表示,那么你的问题就更加模糊了,因为你的原始值是有符号的。您打算如何拆分有符号的值?你期望什么样的结果?签名?没有签名?高位部分有符号,低位部分无符号?还是别的什么?
对于无符号值,它将如下所示(假设收件人类型long具有适合您的目的的大小)
unsigned long long long_type = ...;
unsigned long hi = long_type / ULONG_MAX;
unsigned long lo = long_type;如果你想拆分对象表示,正确的方法是使用memcpy (在这种情况下,原始值的符号并不重要)
long long long_type = ...;
unsigned long hi, lo;
memcpy(&lo, &long_type, sizeof lo);
memcpy(&hi, (char *) &long_type + sizeof lo, sizeof hi);当然,在这种情况下,哪个部分实际上是低阶部分,哪个部分是高阶部分将取决于平台。
发布于 2011-04-13 01:30:09
我推荐使用uint32_t和uint64_t或其他固定宽度类型。
然后使用位操作来拆分它,如下所示:
uint64_t long_type = smthng;
uint32_t high = (long_type & 0xFFFFFFFF00000000ULL) >> 32;
uint32_t low = long_type & 0xFFFFFFFF;发布于 2011-04-13 01:29:05
long a = long_type;
long b = (static_cast<unsigned long long>(long_type) >> 32);https://stackoverflow.com/questions/5639210
复制相似问题