草庐IT

bit-fields

全部标签

c++ - 结构中的位顺序不是我所期望的

我有一个使用16位float的框架,我想分离它的组件然后用于32位float。在我的第一种方法中,我使用了移位和类似的方法,虽然它有效,但阅读起来却非常困惑。然后我想改用自定义位大小的结构,并使用union来写入该结构。重现问题的代码:#include#includeunionfloat16_and_int16{struct{uint16_tMantissa:10;uint16_tExponent:5;uint16_tSign:1;}Components;uint16_tbitMask;};intmain(){uint16_tinput=0x153F;float16_and_int16

C++ : sharing fields between class and superclasses

我对类和父类(superclass)共享字段有点困惑。我期待这没问题:classSuperC{public:SuperC();protected:doublevalue;};classC:publicSuperC{public:C(doublevalue);};SuperC::SuperC(){}C::C(doublevalue):SuperC(),value(value){}但编译器告诉我C没有字段“值”。C没有继承自SuperC中定义的那个?非常感谢 最佳答案 可以,但是您只能使用构造函数初始化列表语法来初始化当前类成员。您必须

C++ boolean 数组作为位域?

假设我需要在一个结构中存储8个boolean值,但我只想将它们一起使用1个字节,那么我可以这样做:structmyStruct{boolb1:1;boolb2:1;boolb3:1;boolb4:1;boolb5:1;boolb6:1;boolb7:1;boolb8:1;};有了这个我可以做类似的事情myStructasdf;asdf.b3=true;asdf.b4=false;if(asdf.b1)...到目前为止这是正确的吗?(我其实不知道,我以前从未使用过位域)好的-但是否也可以创建一个包含8个boolean值的静态数组,这样它们将仅使用8位,但我仍然可以通过索引对它们进行寻址?

C++11 统一初始化 : Field initializer is not constant

我正在尝试像这样实例化一组字符串:classPOI{public:...staticconststd::setTYPES{"restaurant","education","financial","health","culture","other"};...}现在,当我这样做时,我得到了这些错误(全部在这一行):error:fieldinitializerisnotconstantstaticconststd::setTYPES{"restaurant","education","financial","health","culture","other"};error:in-class

c++ - 除了节省空间的明显好处之外,位域是否有任何隐藏的成本或好处?

这是声明位域的方式:unsignedm_bitfield1:2;//abitfieldthatoccupies2bitsunsignedm_bitfield2:1;//abitfieldthatoccupies1bit位域只是一个具有特定位大小的小域。我的问题是:我是否可以使用自己的算法来处理默认数据类型(例如占用大量不必要空间的整数或float)作为任意大小的较小部分的集合,或者使用位域有一些隐藏的好处?谢谢。 最佳答案 可以将整数用作您自己访问和管理的位的集合。但是经常有un-thought-ofcosts使用编译器生成的位字段

c++ - #include <bits/stdc++.h> 与 visual studio 不编译

这个问题在这里已经有了答案:WhyshouldInot#include?(9个回答)关闭去年。社区在8个月前审查了是否重新打开此问题,然后将其关闭:原始关闭原因未解决我最近看到#include包括每个标准库和STL包含文件。当我尝试使用visualstudio2013编译以下代码段时,它给出了errorC1083:Cannotopenincludefile:'bits/stdc++.h':Nosuchfileordirectory.但它与代码块一起工作得很好。有什么办法可以避免这个错误吗?#includeusingnamespacestd;intmain(){}我在一些帖子中看到“头文

text_field_tag占位符忽略导轨中空间后的动态文本

我正在使用I18N进行国际化。使用以下代码以text_field_tagim的占位符中以语言语言语言显示位置持有人的内容。和config/locales/en.yml内容如下:en:shared:enter_email:EnterEmail在运行应用程序时,占位符中的内容仅包含Enter它的忽略name因为之间有一个空间。我尝试了不同的语法,所有语法都产生了相同的结果。有没有办法完成此操作?看答案我能够通过使用这样的插值来解决此问题。

MySQL之Field‘***’doesn’t have a default value错误解决办法

目录一、找到mysqlServer文件夹,打开my.ini配置文件,查找如下语句:二、修改成如下:PS:如何找到my.ini文件。第一步右键我的电脑(计算机)——点击管理(G),如下图所示:第二步:点击服务和应用程序----服务选项 第三步:在右边服务中找到mysql之后右键--属性第四步:这样你就可以看到你的mysql的路径了:LAST:做一下总结首先排查一下数据库中对应的字段是否是设置为不能为空,以至数据插入不进去。个人就是这个缘由解决的。下面,说一下遇到相同问题的其余解决办法,方便出现问题的同窗参考:(windows环境)MySql一、找到mysqlServer文件夹,打开my.ini配

c++ - 这个小程序是如何工作的?

我试图查看有关C++的QA练习,但有一个问题让我抓狂!!typedefstruct{unsignedinti:1;}myStruct;intmain(){myStructs;s.i=1;s.i++;cout问题说输出是什么:0/1/2/3/-1/SegError?我确实检查了2这是一个错误的答案:D,为什么程序显示0? 最佳答案 您需要熟悉bitfields.默认情况下,int的大小为32位(4字节)。但是使用给定的表示法,您可以指定变量使用了多少位。因此,当您从1开始递增该值时,它会溢出并返回到零。

c++ - 线程安全和位域

我知道位域依赖于编译器,但我没有找到有关最新g++和VisualC++2010位域线程安全的文档。位域成员的操作是原子的吗? 最佳答案 不幸的是,“线程安全”在编程中是一个非常过载的术语。如果您指的是对位域的原子访问,答案是否定的(至少在我所知道的所有处理器上是这样)。您可以原子访问32位机器上的32位内存位置,但这仅意味着您将读取或写入整个32位值。这并不意味着另一个线程不会做同样的事情。如果您想要停止,您可能需要同步。如果您指的是对位域的同步访问,那么答案也是否定的,除非您将访问包装在更高级别的同步原语(通常基于原子操作)中。简