位域赋值注意事项

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 typedef volatile unsigned int vuint32_t;
 5 
 6 struct
 7 {
 8   union
 9   {
10     vuint32_t R ;
11     struct
12     {
13       vuint32_t : 23 ;
14       vuint32_t NVML : 1 ;
15       vuint32_t OPS : 2 ;
16       vuint32_t : 1 ;
17       vuint32_t OPR : 5 ;
18     } B ;
19   } CTRL ;
20 
21   unsigned int age;
22 } Age = {0xff800000, 5};
23 
24 /*
25 000001ff
26 
27 0xff800000  OK
28 */
29 
30 int main( )
31 {
32    printf( "Sizeof( Age ) : %d\n", sizeof(Age) );
33    
34    printf( "Age.age : %d\n", Age.age);
35 
36   printf( "Age.CTRL.B.NVML : %d\n", Age.CTRL.B.NVML);
37 printf( "Age.CTRL.B.OPS : %d\n", Age.CTRL.B.OPS);
38 printf( "Age.CTRL.B.OPR : %d\n", Age.CTRL.B.OPR); 
39  
40    return 0;
41 }

执行结果:

1 [hadoop@Master001 test_code]$ ./test.exe 
2 Sizeof( Age ) : 8
3 Age.age : 5
4 Age.CTRL.B.NVML : 1
5 Age.CTRL.B.OPS : 3
6 Age.CTRL.B.OPR : 31

 

 

注意我们的机器上都是大端,也就是高位在后,低位在前的

posted on 2022-10-30 16:29  帅胡  阅读(66)  评论(0编辑  收藏  举报

导航