fn set_bits(&mut self, range: Range, value: Self) -> &mut Self { assert!(range.start < Self::length()); assert!(range.end <= Self::length()); assert!(range.end > range.start);
let shift_bits = Self::length() - range.end;
let mask = !0 << shift_bits >> shift_bits >> range.start << range.start;
*self = (*self & mask) | (value << range.start);
self
}
这段代码是啥意思 ,为啥左移后又又移回来?
Ext Link: https://blog.csdn.net/qq_41698827/article/details/103353698
1
共 1 条评论, 1 页
评论区
写评论代码的目的是将 range 范围外的bit置零。 第一个左移是多余的。对于含符号的整数类型如i32,高位并没有置零。