jjzjj

c++ - 按位读取缓冲区

我有一个缓冲区,其中包含一些具有不同位大小的数据(8位字段,然后是4位字段,然后是9位字段...)。我需要阅读它。如果有一些库允许使用位级别而不是字节级别的指针读取它,那就太好了。将缓冲区复制到结构不是一种选择,因为在研究之后我需要使用#pragmapack()或类似的东西,并且不可移植。有什么想法吗?编辑:我将尝试用一个例子来解释我的问题的严重性:field1:8bits-->ok,getfirstbytefield2:6bits-->ok,secondbyte,andamaskfield3:4bits-->getsharder,ihavetoget2bytes,apply2diff

c++ - 按位替换两个数字中的位

我对如何使用按位运算将位间隔从数字X交换到数字Y很感兴趣。例如我有数字:X=00000000Y=00111111位置开始,位置结束我想用相同位置的Y中的位替换X中的[positionStart,positionEnd]位。 最佳答案 如果您有一个掩码m指示您要移动或交换的位,您可以像这样移动它们:x=x^((x^y)&m)或者像这样交换它们:t=(x^y)&mx^=ty^=t这可以解释为取x和y之间的位差,仅在设置了m的地方。然后对x进行异或运算,翻转x中的位,其中x和y不同(而m已设置),因此它将x的那些位更改为y的位。y也是如此

c++ - boost 序列化按位序列化能力

我期望从is_bitwise_serializable特性中序列化如下类(没有序列化函数):classA{inta;charb;};BOOST_IS_BITWISE_SERIALIZABLE(A);Aa{2,'x'};some_archive我想知道,为什么需要为bitwise_serializable类提供序列化功能? 最佳答案 来自文档:Somesimpleclassescouldbeserializedjustbydirectlycopyingallbitsoftheclass.Thisis,inparticular,thec

c++ - C++中的按位运算,如何实际使用它?

我明白了11001110&10011000=10001000但我想自己测试一下所以我声明了unsignedchar并将其打印出来,但它只是给我一片空白。unsignedcharresult;result=11001110&10011000;cout也用unsignedint测试过,但它给了我0,这不是我所期望的 最佳答案 11001110和10011000不是二进制数(至少在编译器看来)。二进制11001110是206,而10011000是152,所以你实际上想要(我认为):result=206&152;或使用std::bitset

使用一种按位 : I'll get duplicated values? 的 C++ 函数

这是我的C++函数,它使用一种按位:intgenkey(constunsignedchara,constcharb,constcharc){intval=0;unsignedchar*p=reinterpret_cast(&val);p[0]=a;char*q=reinterpret_cast(&val);q[1]=b;q[2]=c;returnval;}我用它来生成键(对象的唯一值)。可以传递给函数的值的范围是:对于a参数=>[0..255],对于b参数=>[0..127]和对于c参数=>[0..127].假设该函数只能使用相同的三个参数值调用一次。例如,只有一次调用的值为(10,0

c++ - 按位操作或按位编程

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我知道按位运算符、位操作、2的补码等概念。但是当涉及到使用位操作解决问题时,我并不感兴趣。我花时间思考它们。我认为如果我查看一些关于位运算符/位操作的问题会有所帮助,但它让我更加困惑如何处理这个主题。我不是在寻找特定问题的答案,而是在解决位操作时寻找通用的方法/思维方式。谢谢。

c++ - 按位 - 如何检查一个二进制数是否包含另一个?

A=110000000-384Blue+RedB=011000010-194Green+Black+RedA&B=C=010000000-128Red如何检查B是否包含A中的所有位以及其他位?在上述情况下,我想得到“假”。我正在使用XCode和objective-c,但据我所知这应该无关紧要 最佳答案 如果A&B(即交集)等于A,则B包含A:(a&b)==a类似于a⊆b↔(a∩b)=a来自集合论。 关于c++-按位-如何检查一个二进制数是否包含另一个?,我们在StackOverflow上

c++ - 按位将 uint32_t 强制转换为 C/C++ 中的 float

我正在从网络接收缓冲区,该缓冲区已转换为32位字数组。我有一个词被我的接口(interface)文档定义为IEEE-754float。我需要从缓冲区中提取这个词。在不调用转换的情况下很难从一种类型转换为另一种类型。这些位已经符合IEEE-754浮点标准,我不想重新安排任何位。我的第一个尝试是将uint32_t的地址转换为void*,然后将void*转换为float*,然后解引用为float:floatieee_float(uint32_tf){return*((float*)((void*)(&f)));}error:dereferencingtype-punnedpointerwil

c++ - 按位小于或等于

似乎有人误以为这是一场比赛。我正在尝试完成一项作业,现在我已经坚持了一个小时。/**isLessOrEqual-ifx>*Maxops:24*Rating:3*/intisLessOrEqual(intx,inty){intgreater=(x+(~y+1))>>31&1;return!(greater)|(!(x^y));}我只能按照评论中的说明使用按位运算符。我不知道如何解决x;我的想法是我可以将x设置为其二进制补码(~x+1)并将其与Y相加.如果是负数,X大于Y.因此,通过否定I可以获得相反的效果。同样,我知道!(x^y)相当于x==y.然而,做!(greater)|(!(x^y

C++: union 与按位运算符

我有两个char,我想将它们按位“拼接”在一起。例如:charc1=11;//00001011charc2=5;//00000101shortintsi=stitch(c1,c2);//0000101100000101所以,我首先尝试的是按位运算符:shortintstitch(charc1,charc2){return(c1但这不起作用:我得到一个short等于c2...(1)为什么?(但是:c1和c2在我的真实应用中是负数...也许这是问题的一部分?)所以,我的第二个解决方案是使用union:unionstUnion{struct{charc1;charc2;}shortintsi