我有以下自学习代码:
#include <iostream>
using namespace std;
struct bitfields{
unsigned field1: 3;
unsigned field2: 4;
unsigned int k: 4;
};
int main(){
bitfields field;
field.field1=8;
field.field2=1e7;
field.k=18;
cout<<field.k<<endl;
cout<<field.field1<<endl;
cout<<field.field2<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道这unsigned int k:4
意味着k是4位宽,或最大值15,结果如下.
2
0
1
Run Code Online (Sandbox Code Playgroud)
例如,filed1
可以是从0到7(含),field2
并且k
从0到15为什么这样的结果?也许它应该全部为零?
你满是田野.我们k
举一个例子,它是4位宽.正如你所说,它可以保存0到15之间的值,这是二进制表示
0 -> 0000
1 -> 0001
2 -> 0010
3 -> 0011
...
14 -> 1110
15 -> 1111
Run Code Online (Sandbox Code Playgroud)
所以当你指定18时,有二进制表示
18 -> 1 0010 (space added between 4th and 5th bit for clarity)
Run Code Online (Sandbox Code Playgroud)
k
只能保持低四位,所以
k = 0010 = 2.
Run Code Online (Sandbox Code Playgroud)
等效也适用于其他字段.
归档时间: |
|
查看次数: |
2663 次 |
最近记录: |