Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c+中使用位值而不是字符+;节目?_C++_Binary - Fatal编程技术网

C++ 如何在c+中使用位值而不是字符+;节目?

C++ 如何在c+中使用位值而不是字符+;节目?,c++,binary,C++,Binary,我有一些代码需要改进。这是一个简单的应用程序,适用于2DBPP的一个变体,您可以在 下面是我使用chars的概述(我想改为切换为二进制值。)使用“0()”初始化内存块: 有时我会检查特定值: if (!bin[j*height+k]) {...} 或区块: if (memchr(bin+i*height+pos.y, '\1', pos.height)) {...} 或将值设置为“1”: memset(bin+i*height+best.y,'\1',best.height); 我不知道有

我有一些代码需要改进。这是一个简单的应用程序,适用于2DBPP的一个变体,您可以在

下面是我使用chars的概述(我想改为切换为二进制值。)使用“0()”初始化内存块:

有时我会检查特定值:

if (!bin[j*height+k]) {...}
或区块:

if (memchr(bin+i*height+pos.y, '\1', pos.height)) {...}
或将值设置为“1”:

memset(bin+i*height+best.y,'\1',best.height);
我不知道有哪种标准类型或方法可以处理二进制值。如何使用位而不是字节

你可能对一个相关的问题感兴趣-

谢谢大家!


编辑:还有一个更大的问题——这会是一个进步吗?我只关心时间。

对于初学者,您可以参考以下帖子:

也可以尝试查看C++ STD位集或位字段。 我建议阅读上的,它是的运行时大小的版本

另一方面,如果你不想因为某种原因使用Boost,考虑使用<代码> STD::vector < /代码>。引用cppreference.com:

请注意,布尔向量(
std::vector
)是向量模板的特殊化,旨在使用更少的内存。普通布尔变量通常使用1-4字节的内存,但布尔向量每个布尔值仅使用一位


除非内存空间是一个问题,否则我会远离一些无聊的事情。您可能会节省一些内存空间,但会延长性能时间。打包和解包位需要时间和额外的代码

在尝试位旋转之前,使代码更加健壮和正确。使用可以提高性能和内存使用率的不同(高级)设计


如果你要学习位级,学习布尔算术和逻辑。重新设计数据,以便在位级别更易于操作

c++位向量
获得大量谷歌点击量。嗯。。。你在谷歌上搜索过“c++位操作”吗?我搜索过。我想我要找的是memset和memchr的比特。。。我也看过这个向量,但我还是无法用头脑去理解它。我会再给它一次机会,我不在乎记忆。只有时间。我想我需要把一些基准放在一起,看看位是否比字节给我更好的时间。
memset(bin+i*height+best.y,'\1',best.height);