protobuf 中的奇怪表达式:if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
strange expression in protobuf : if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
在使用 protoc 从 .proto 文件 (google protobuf) 生成的 faster-rcnn c++ 代码中,我看到了这一行但无法理解。
caffe-fast-rcnn/.build_release/src/caffe/proto/caffe.pb.cc
void NetParameter::MergeFrom(const NetParameter& from) {
GOOGLE_CHECK_NE(&from, this);
input_.MergeFrom(from.input_);
input_shape_.MergeFrom(from.input_shape_);
input_dim_.MergeFrom(from.input_dim_);
layer_.MergeFrom(from.layer_);
layers_.MergeFrom(from.layers_);
if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
if (from.has_name()) {
set_name(from.name());
}
if (from.has_force_backward()) {
set_force_backward(from.force_backward());
}
if (from.has_state()) {
mutable_state()->::caffe::NetState::MergeFrom(from.state());
}
if (from.has_debug_info()) {
set_debug_info(from.debug_info());
}
}
mutable_unknown_fields()->MergeFrom(from.unknown_fields());
}
它用于合并(覆盖奇异值并添加到数组)从 'from' 到 'to' 的网络参数。我这里的问题是这个表达式:
if (from._has_bits_[0 / 32] & (0xffu << (0 % 32)))
为什么使用 0/32 作为索引,它只是 0?以及为什么使用 0 % 32,它也是 0?
代码生成器经常创建这样的代码。在您的情况下,表达式 0%32 和 0/32 的结果都是 0。由于预处理器都 calculated/simplified,因此它们不消耗运行时间。
在使用 protoc 从 .proto 文件 (google protobuf) 生成的 faster-rcnn c++ 代码中,我看到了这一行但无法理解。 caffe-fast-rcnn/.build_release/src/caffe/proto/caffe.pb.cc
void NetParameter::MergeFrom(const NetParameter& from) {
GOOGLE_CHECK_NE(&from, this);
input_.MergeFrom(from.input_);
input_shape_.MergeFrom(from.input_shape_);
input_dim_.MergeFrom(from.input_dim_);
layer_.MergeFrom(from.layer_);
layers_.MergeFrom(from.layers_);
if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
if (from.has_name()) {
set_name(from.name());
}
if (from.has_force_backward()) {
set_force_backward(from.force_backward());
}
if (from.has_state()) {
mutable_state()->::caffe::NetState::MergeFrom(from.state());
}
if (from.has_debug_info()) {
set_debug_info(from.debug_info());
}
}
mutable_unknown_fields()->MergeFrom(from.unknown_fields());
}
它用于合并(覆盖奇异值并添加到数组)从 'from' 到 'to' 的网络参数。我这里的问题是这个表达式:
if (from._has_bits_[0 / 32] & (0xffu << (0 % 32)))
为什么使用 0/32 作为索引,它只是 0?以及为什么使用 0 % 32,它也是 0?
代码生成器经常创建这样的代码。在您的情况下,表达式 0%32 和 0/32 的结果都是 0。由于预处理器都 calculated/simplified,因此它们不消耗运行时间。