什么是变量类型位(32)?

时间:2019-06-07 12:23:00

标签: c++ binary

什么是bit(32)类型的变量,什么时候可以使用它?我似乎也无法在我自己的C ++代码(在xcode中)中复制此声明。这是在mp4文件规范中使用的示例,作为类中变量声明的一部分:

bit(32)[6]  pre_defined = 0;
aligned(8) class MovieHeaderBox extends FullBox(‘mvhd’, version, 0) {
 if (version==1) {
  unsigned int(64) creation_time;
  unsigned int(64) modification_time;
  unsigned int(32) timescale;
  unsigned int(64) duration;
 } else { // version==0
  unsigned int(32) creation_time;
  unsigned int(32) modification_time;
  unsigned int(32) timescale;
  unsigned int(32) duration;
 }
 template int(32) rate = 0x00010000; // typically 1.0
 template int(16) volume = 0x0100; // typically, full volume
 const bit(16) reserved = 0;
 const unsigned int(32)[2] reserved = 0;
 template int(32)[9] matrix = { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 };
 // Unity matrix
 bit(32)[6] pre_defined = 0;
 unsigned int(32) next_track_ID;
}

2 个答案:

答案 0 :(得分:4)

所示的代码段不是C ++。您引用的标准说:

  

框的定义以MPEG-4中定义的语法描述语言(SDL)给出(请参阅   请参阅第2条)。

该语言似乎是在ISO / IEC 14496-1中指定的。它说

  
      
  1. 语法描述语言请注意名称稍有变化,与14496-12中提到的名称略有不同
  2.   
     

12.2.1恒定长度直接表示位字段

     

等长直接表示位字段表示为:

     

规则E.1:基本数据类型

[aligned] type[(length)] element_name [= value]; // C++-style comments allowed
     

类型可以是以下任意一种:'int'表示有符号整数,'unsigned int'表示无符号整数,'double'表示浮点数,'bit'表示原始二进制数据。< / p>

答案 1 :(得分:3)

那不是C ++,只是伪代码。这只是意味着它是32位布尔值。因此,有效值为0或1,而不是全部为32位,因此该名称也可能与unsigned int区别开来。在C ++中,您必须使用std::uint32_t,也可以使用enum:

enum class 32bitBool : std::uint32_t{
   Yes = 1,
   No = 0
};