I have the following code for self learning:

```
#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;
}

```

I know that `unsigned int k:4` means that k is 4 bits wide, or a maximum value of 15, and the result is the following.

```
2
0
1

```

For example, `filed1` can be from 0 to 7 (included), `field2` and `k` from 0 to 15. Why such a result? Maybe it should be all zero?