按位整数分段

时间:2017-12-15 05:32:41

标签: c++ arrays bit-manipulation enet

对于某些背景,我试图编写一个系统来传递整数数据包,以便使用布尔切换来构建迷宫,以确定两个节点之间是否应该有一个墙,目前我的迷宫处理480墙,因此我不想发送包含单个项目的数据包,而是将其拆分为整数数组(长度为8),从而为我提供480/8个对象。

const int wallRows = mazeSize / 8;
int temp = NULL;
int temp2 = NULL;
int current = NULL;
int concatCount = 0;
int* walls = new int[wallRows];
int wallIndex = 0;

for (int i = 0; i < mazeSize; i++) {
    current = temp2;
    //ensure my ints have only 8 bytes
    if (concatCount >= 7) {
        //allocate a full int to the array
        walls[wallIndex] = temp;
        //clear the int
        temp = NULL;
        //move to the next array pos
        wallIndex++;
        //restart the int count
        concatCount = 0;
    }
    if (maze->allEdges[i]._iswall) {
        //append a 1 to the int
        temp = 0b1;
    }
    else {
        //append a 0 to the int
        temp = 0b0;
    }
    //increment the int count
    current = (temp2 << 1) | temp;
    concatCount++;
}

这是我目前建立的,我的想法是从一个int开始,根据bool&#34; _isWall&#34;的返回将它传递给int。并将结果移位到int的末尾。 当int达到容量时,迭代到数组中的下一个int并再次开始,直到迷宫的墙壁填充了数组。

编辑:我所要求的内容不明确。 我的按位操作似乎没有实际分配多个位到同一个整数,我哪里错了?

1 个答案:

答案 0 :(得分:1)

使用select '2017-02-20 08:22:44.166'::timestamp(2), '2017-02-20 08:22:44.166'::timestamp(1) timestamp | timestamp ------------------------+----------------------- 2017-02-20 08:22:44.17 | 2017-02-20 08:22:44.2 (1 row) ,而不是val | (1UL << temp2)来设置位。稍后您可以使用按位temp2 << 1运算符来查看该位是否已设置。必须将整个字节初始化为零,并且仅当值为true时才设置该位。这是一个例子:

&