了解按位运算及其影响

时间:2018-09-25 12:16:10

标签: c++ windows bitwise-operators

我正在尝试通过以下代码了解按位运算符的用途:

SELECT SUM(AMN) 
OVER (PARTITION BY ID 
     ORDER BY DATE RANGE BETWEEN INTERVAL '100' DAY(3) PRECEDING 
     AND CURRENT ROW) S1
FROM ddd

此代码之后出现访问冲突:

#define BIT8 unsigned char
#define BIT16 unsigned short
#define MEAN_SIZE (sizeof(BIT16) * 32)

void *Alloc16Address(void** pAlignedStart, unsigned long ulBytes)  // ulBytes=2048
{
  void *pBuffer = new BIT8 [ulBytes + 16];
  *pAlignedStart = (void*)((((unsigned long)pBuffer >> 4) << 4) + 16);
  return pBuffer;
}

我知道用尽文件可能会产生错误,但是以前这适用于相同的代码和文件,唯一的变化是从旧的WIN7计算机迁移到新的WIN10计算机。至少我想排除按位操作线是罪魁祸首。这段代码能否受某些环境变化的影响?

1 个答案:

答案 0 :(得分:3)

与按位运算符无关。问题是unsigned long在64位Windows上只有32位。该代码可能在WIN32上运行正常。

更改:

*pAlignedStart = (void*)((((unsigned long)pBuffer >> 4) << 4) + 16);

收件人:

*pAlignedStart = (void*)((((uintptr_t)pBuffer >> 4) << 4) + 16);