草庐IT

bit-shift

全部标签

c++ - GDI+加载一个jpg并另存为24bit png的问题

问题大家好!我有这段代码,它使我的jpg图像循环通过改变像素并最终将其保存为png类型。问题是生成的图像的位深度为32位。我需要它是24位的,任何人都可以阐明正确的设置方法吗?我是否在寻找将像素格式设置为PixelFormat24bppRGB的正确轨道?代码staticinlinevoidBrighten(Gdiplus::Bitmap*img){intwidth=img->GetWidth()/8,height=img->GetHeight(),max=(width*height),r,g,b;Gdiplus::Colorpixel;for(inta=0,x=0,y=-1;aGetP

c++ - 当出现 icq 桌面错误时如何编辑 makefile (make : *** [all] Error 2) Ubuntu 18. 04 64 bit

我尝试编译icqdesktop在ubuntu18.0464位上,我尝试了:mkdirbuild&&cdbuild&&cmake..-G"UnixMakefiles"-DCMAKE_BUILD_TYPE=Release-DLINUX_ARCH=64&&make但是我有这个错误:[19%]Builttargetcore[19%]Builttargetcorelib[20%]LinkingCXXexecutable../../bin/Release64/icq.../usr/bin/x86_64-linux-gnu-ld:../../external/linux/x64/libevent-2

C#,二进制数的非0位数统计(Bits Count)的算法与源代码

计算一个十进制数的二进制表示有多少位1?1遍历法(递归或非递归)使用循环按位统计1的个数。2哈希查表法利用一个数组或哈希生成一张表,存储不同二进制编码对应的值为1的二进制位数,那么在使用时,只需要去进行查询,即可在O(1)的时间复杂度内得到结果。但是,此算法有个弊端,由于算法是采用空间换取时间的方法,当一个二进制数的位长超过一定限度时,对应的表也就会占据很大的空间,也就是说节约时间越多,花费的存储越多。另外此方法还会收到CPU缓存的限制,如果表太大,表在缓存的上下文切换也就越多,可能会导致性能没有想象中那么高。所以,为了解决此问题,一般情况下,采用适当的二进制位长度来建表,比如8位、16位,这

c++ - 将移位运算符应用于已定义的有符号类型 : UB and Impl.

C++03标准告诉我们,将移位运算符应用于有符号类型的结果可以是UB和Impl。为负值定义。我的问题如下:为什么运算符它有未定义的行为,而对于运算符>>它只是实现定义?的结果是否有严格的原因?也不能定义实现?提前致谢。 最佳答案 根据5.8/2(不可否认,在C++98中,这是我可以访问的所有内容):ThevalueofE1在我看来,它非常适合左移。未定义的是使用的有符号值(例如二进制补码)的表示,因此结果的数字值是为负值定义的实现。这与右移形成对比,在右移中空位可能为零或填充1,具体取决于有符号值的表示。

c++ - 如何访问一片 packed_bits<> 作为 std::bitset<>?

我正在尝试实现packed_bits使用可变参数模板和std::bitset的类.特别是,我在编写get时遇到了问题返回对成员m_bits子集的引用的函数其中包含所有打包位。该功能应类似于std::get对于std::tuple.它应该作为一个引用叠加层,这样我就可以操作packed_bits的一个子集。.例如,usingmy_bits=packed_bits;my_bitsb;std::bitset&s0=get(b);std::bitset&s1=get(b);std::bitset&s2=get(b);更新下面是根据Yakk'srecommendationsbelow重写的代码.

c++ - 从 8 位转换为 1 字节

我有一个8位的字符串,我想将它转换成1个字节。我不确定为什么我的功能无法正常工作。我将8位存储到8个无符号字符的数组中。到目前为止,这是我的方法:unsignedintbitsToBytes(unsignedchar*bits){unsignedintsum=0;for(inti=7;i>=0;i--){sum+=bits[i];sum编辑:我的位数组在数组中包含“1”和“0”!抱歉没说清楚。有人知道我哪里做错了吗?我不确定为什么我的位没有正确转换为字节。有人能帮忙吗?谢谢! 最佳答案 sum+=bits[i];如果您正在尝试转换C

c++ - 移位导致奇怪的类型转换

以下代码在没有警告的情况下编译:std::uint16_ta=12;std::uint16_tb=a&0x003f;但是,与按位一起执行移位会导致“隐式转换警告”:std::uint16_tb=(a&0x003f)gcc和clang都提示存在从int到uint16_t的隐式转换,但我不明白为什么引入移位会导致右watch达式为突然评估为int。编辑:对于clang,我使用-std=c++14-Weverything标志进行编译;对于gcc,我使用-std=c++14-Wall-Wconversion标志进行编译。 最佳答案 在使用整

c++ - 我是否负责在 QImage::bits() 函数提供的指针上调用 delete?

Qt类QImage有两个版本的bits()函数,返回指向底层图像数据的指针。一个是const,另一个不是。这是thedocumentation对于非常量版本:Returnsapointertothefirstpixeldata.ThisisequivalenttoscanLine(0).NotethatQImageusesimplicitdatasharing.Thisfunctionperformsadeepcopyofthesharedpixeldata,thusensuringthatthisQImageistheonlyoneusingthecurrentreturnvalue

c# - 位移位是否总是考虑 Endian 体系结构?

假设我正在从C++移植代码并需要在C#中模拟相同的位移技术:每当我执行位移时,我是否必须考虑架构的Endain-ness? 最佳答案 没有。位移是一种纯粹的代数运算。它不比乘以二更依赖于平台。平台相关的是将变量解释为字符数组的结果。 关于c#-位移位是否总是考虑Endian体系结构?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/15315425/

c++ - 设置/清除位 : bitshift or bitmask lookup?

我正在研究基于位板的国际象棋引擎,其中一项大量执行的操作是设置/清除无符号64位整数中的位。由于我不太了解哪些代码可以在某些处理器上“更快”地运行,因此我无法完全理解这一点。设置和清除位是一个非常简单的操作,但我应该使用(设置):uint64_tbitboard|=1ULL或:uint64_tbitboard|=BITMASK[index];其中BITMASK[]是一些预先计算的整数数组,其中恰好设置了一位(在index处)。乍一看,位移位似乎是明显更快的选择,因为位移位总是比内存查找快。但在国际象棋引擎的上下文中,可能会大量执行此操作,因此将查找表存储在处理器的缓存中是有意义的,这可