【问题标题】:What does this array mean?这个数组是什么意思?
【发布时间】:2026-02-09 18:00:01
【问题描述】:
unsigned int PointSet[] = { (10<<16) | 3, (4<<16) | 2, 0xFFFF0002 };

这是什么意思?

| 3是什么操作?

【问题讨论】:

  • | 是按位或。 | 3 会将最后两位设置为 1。
  • 这是一个按位或
  • 这个数组在编译时使用按位运算符计算的常量进行初始化。 | 是按位的 OR&lt;&lt; 是位移位,0x 是十六进制整数文字的前缀。
  • Stack Overflow 不是读书的替代品。保险箱上有许多在线资源。您可以在此处发布您难以解决的问题。读一本关于 C 的书。

标签: c


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    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};
    

    【讨论】: