2017-05-14 149 views
-17
unsigned int PointSet[] = { (10<<16) | 3, (4<<16) | 2, 0xFFFF0002 }; 

这是什么意思?这个数组是什么意思?

| 3是什么操作?

+2

'|'是位或。 '| 3'将最后两位设置为1。 – Cornstalks

+0

它是一个*按位或* –

+0

该数组使用按位运算符在编译时计算的常量初始化。 '|'是按位OR','<<'是位移,'0x'是十六进制整数文字的前缀。 – dasblinkenlight

回答

1

这将创建一个由三个整数组成的数组。逗号分隔常量表达式。 |是按位或运算符。

(10<<16)|3 = (0xA<<16)|3 = (0x000A0000)|0x3 = 0x000A0003 
(4<<16)|2 = (0x00040000)|0x2 = 0x00040002 

你的数组是{0x000A0003,0x00040002,0xFFFF0002}

+0

非常感谢:) –

0
unsigned int PointSet[] = { (10<<16) | 3, (4<<16) | 2, 0xFFFF0002 }; 
     10 = 0000 0000 0000 0000 0000 0000 0000 1010 (Binary) 
0x0000000A = 0 0 0 0 0 0 0 A 
       0000 0000 0000 1010 0000 0000 0000 0000 (16 bit shift) 
0x000A0000 = 0 0 0 A 0 0 0 0 
     3 = 0000 0000 0000 0000 0000 0000 0000 0011 
0x000A0003 = 0000 0000 0000 1010 0000 0000 0000 0011 (... | 3) 

0x00000004 = 0000 0000 0000 0000 0000 0000 0000 0100 
0x00040000 = 0000 0000 0000 0100 0000 0000 0000 0000 (16 bit shift) 
0x00000002 = 0000 0000 0000 0000 0000 0000 0000 0010 
0x00040002 = 0000 0000 0000 0100 0000 0000 0000 0010 (... | 2) 

unsigned int PointSet[] = {0x000A0003, 0x00040002,0xFFFF0002};