草庐IT

c++ - bool 位字段与逻辑位掩码或位移 - C++

我有一系列需要很多bool字段的类,大约在4-10个之间。我不想为每个bool值使用一个字节。我一直在研究位域结构,例如:structBooleanBitFields{boolb1:1;boolb2:1;boolb3:1;boolb4:1;boolb5:1;boolb6:1;};但在做了一些研究后,我看到很多人说这会导致内存访问效率低下,不值得节省内存。我想知道这种情况的最佳方法是什么。我应该使用位字段,还是使用带位掩码的字符(and'sandors)存储8位?如果第二种解决方案是移位更好还是使用逻辑更好?如果有人可以评论他们会使用什么方法以及为什么它真的能帮助我决定我应该走哪条路。提

c# - 将 C++ 代码(使用指针和位移)转换为 C#

我目前正在参与一个将C++代码移植到C#代码的项目,但有些片段并不容易一对一移植,如下所示:#defineCMND_MOVEL10#defineCMND_EXTRASIDE0x80charCmndBuffer[32];int*dst;dst=(int*)&CmndBuffer[0];*dst=0;*dst|=(CMND_MOVEL+(Flags=0){if(sendto(UdpCmdSocket,(constchar*)CmndBuffer,28,0,(structsockaddr*)&UdpCmdPeer,sizeof(UdpCmdPeer))!=SOCKET_ERROR){//mo

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

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

c++ - 如何在 C++ 中对整数值进行位移

我知道这是一个常见问题,但我不明白为什么我会遇到这么多麻烦。我正在尝试将一行从IDL代码转换为C++IDL:fori=0,7dobeginb=ishfy(b,1)print,bendfor我的C++代码:for(inti=0;i我的初始b是255,我希望收到254、252等。相反,我的第一个移位返回510。我假设我的问题是在移位之前没有将b转换为二进制形式。这个对吗?如果是这样,我该如何解决?提前致谢! 最佳答案 因此,该程序100%正常运行。如果您希望它“截断”较高位,则使b成为8位宽的类型,例如char,或者将其与0xFF相与。

c++ - 128 位数字的位移位运算

假设我有一个由4个32位整数组成的数组,我用它来存储128位数字如何对这个128位数字进行左右移位?谢谢! 最佳答案 使用uint128?如果可以,请使用专为此设计的x86SSE指令。(然后,当您对值进行位移后,就可以进行其他128位操作了……)SSE2移位平均需要4条指令,一个分支(一个case语句)。移动超过32位也没有问题。执行此操作的完整代码是使用gcc内在函数而不是原始汇编程序,位于sseutil.c(github:"UnusualusesofSSE2")中——它比粘贴在这里有意义的大一些。许多人在使用SSE2时遇到的障碍

c++ - 在 C++ 中,关于位移和转换数据类型

我最近在StackOverflow上问了一个问题,关于如何将我的数据从16位整数后跟不确定数量的void*-cast内存转换为std::vectorofunsignedchars,以便使用已知的套接字库作为NetLink,它使用签名如下所示的函数来发送原始数据:voidrawSend(constvector*data);(作为引用,这里是那个问题:Castinganunsignedint+astringtoanunsignedcharvector)问题已成功回答,我感谢回答的人。MikeDeSimone给出了一个send_message()函数示例,该函数将数据转换为NetLink接受

c++ - 将位移动到掩码中给定位置的快速方法

我正在寻找一种快速迭代掩码中设置的所有可能位分配的方法。例子:掩码=0b10011结果={0b00000,0b00001,0b00010,0b00011,0b10000,0b10001,0b10010,0b10011}我需要遍历所有这些。目前我使用与此类似的代码,效果很好:intcount=popCount(mask);uint64_tnumber=0;for(uint64_tnumber=0;number>1;//make2ndlsbthenextonetocheck}returnresult;}shiftBit示例:mask=0b10011001number=0b1010=0b10

c++ - C++ 中的位移位

我不明白为什么这给了我同样的答案:longlonga=3265917058>>24;std::cout>24;std::cout但这不是:longlonga=(3265917058>24;std::cout>24;std::cout更新:我想要32位移位,但是我如何对一个对于int变量来说太大的数字进行32位移位?Update2:我的答案是制作unsignedintip。然后一切都会好的。 最佳答案 您的文字常量3265917058是一个int。添加LL后缀以获得预期的行为(u)r:longlonga=(3265917058LL>2

c++ - 在小端和大端上进行位移

这个问题在这里已经有了答案:Bitwiseoperatorsand"endianness"(5个答案)关闭7年前。这会不会:((0x10203040>>24)&0xFF)==0x10在小端和大端机器上始终为TRUE?

c++ - MPI 查找位移的不同方法

假设我有一个结构类型如下:typedefstruct{floatx,y,z;floatvelocity;intn,type;}Particle;我要发送。我必须创建一个MPI_Type。我知道4种方法。我在下面列出了它们。我想知道它们的区别、限制和好处是什么。使用MPI_Type_extent使用offsetof()在stddef.h,在这个答案中有解释:MPIDerivedTypeSendanswer使用MPI_Get_address,也是同一个答案中的一个例子。使用reinterpret_cast,我没试过,但这里有一个例子:MPICreateCustomData