当前位置:  开发笔记 > 编程语言 > 正文

你如何在C++中使用按位标志?

如何解决《你如何在C++中使用按位标志?》经验,为你挑选了2个好方法。

根据这个网站,我希望代表一个具有16位整数的二维数组的迷宫.

每个16位整数需要包含以下信息:

这是一种方法(这绝不是唯一的方法):12x16迷宫网格可以表示为16位整数的数组m [16] [12].每个数组元素都包含网格中单个相应单元格的所有信息,整数位映射如下:

替代文字
(来源:mazeworks.com)

要击倒墙壁,设置边框或创建特定路径,我们需要做的就是在一个或两个数组元素中翻转位.

如何在16位整数上使用按位标志,这样我就可以设置这些位中的每一位并检查它们是否已设置.

我想以一种易读的方式(即Border.W,Border.E,Walls.N等)来实现.

这通常是如何在C++中完成的?我是否使用十六进制表示每一个(即Walls.N = 0x02,Walls.E = 0x04等)?我应该使用枚举吗?


另请参阅如何设置,清除和切换单个位?.



1> KPexEA..:

如果你想使用位域,那么这是一个简单的方法:

typedef struct MAZENODE
{
    bool backtrack_north:1;
    bool backtrack_south:1;
    bool backtrack_east:1;
    bool backtrack_west:1;
    bool solution_north:1;
    bool solution_south:1;
    bool solution_east:1;
    bool solution_west:1;
    bool maze_north:1;
    bool maze_south:1;
    bool maze_east:1;
    bool maze_west:1;
    bool walls_north:1;
    bool walls_south:1;
    bool walls_east:1;
    bool walls_west:1;
};

然后你的代码可以测试每个代码的真或假.


除非您想在机器之间发送此二进制数据结构,或将其存储到文件中并使用其他程序将其读回,否则位的顺序并不重要.所以这得到了我的+1票.

2> Vinay..:

使用 std::bitset    

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有