什么是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;
}
答案 0 :(得分:4)
所示的代码段不是C ++。您引用的标准说:
框的定义以MPEG-4中定义的语法描述语言(SDL)给出(请参阅 请参阅第2条)。
该语言似乎是在ISO / IEC 14496-1中指定的。它说
- 语法描述语言请注意名称稍有变化,与14496-12中提到的名称略有不同
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
};