128位的整型,存储两个64位的指针(位运算应用,指针长度)
基于64位系统
将两个指针(地址),保存在连续的地址中
可以用于CAS操作,一次CAS可以原子的操作两个地址
__uint128_t v; // 128位
// [127... 64...0]128位在内存中的排列顺序
auto v1 = (v >> 64); // 右移64为,得到 [64--127]
auto v2 = (unsigned long long)v; // 强制转换为64位的,得到[0-63]
v1 = (unsigned long long) new int(654321);
v2 = (unsigned long long) new int(123456);
cout << "-----------" << endl;
cout << (void*)v1 << " " << (void*)v2 << endl;
cout << *(int*)v1 <<" "<< *(int*)v2;
运行结果
标题2023.08.22更新
#define MAKEWORD(a,b) ((WORD) (((BYTE) (((DWORD_PTR) (a)) & 0xff)) | ((WORD) ((BYTE) (((DWORD_PTR) (b)) & 0xff))) << 8))
#define MAKELONG(a, b) ((LONG) (((WORD) (((DWORD_PTR) (a)) & 0xffff)) | ((DWORD) ((WORD) (((DWORD_PTR) (b)) & 0xffff))) << 16))
#define LOWORD(l) ((WORD) (((DWORD_PTR) (l)) & 0xffff))
#define HIWORD(l) ((WORD) ((((DWORD_PTR) (l)) >> 16) & 0xffff))
#define LOBYTE(w) ((BYTE) (((DWORD_PTR) (w)) & 0xff))
#define HIBYTE(w) ((BYTE) ((((DWORD_PTR) (w)) >> 8) & 0xff))