什么是变量类型位(32)

What is a variable type bit(32)?

本文关键字:类型 变量 什么      更新时间:2023-10-16
什么是

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

显示的代码段未C++。您引用的标准说:

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

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

  1. 句法描述 语言 注意名称略有不同,与 14496-12 中提到的名称相比

12.2.1 常长直接表示位域

恒定长度直接表示位字段表示为:

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

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

类型可以是以下任何类型:"int"表示有符号整数,"无符号 int"表示无符号整数,"double"表示浮点,"bit"表示原始二进制数据

这不是C++,只是伪代码。这只是意味着它是 32 位布尔值。因此,有效值为 0 或 1,而不是全部为 32 位,并且该名称可能也用于将其与 unsigned int 区分开来。C++你必须使用std::uint32_t或者你可以使用枚举:

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