< 返回版块

yueruijie 发表于 2021-04-25 15:10

Tags:输入数判断其二进制第x到y位是0还是1

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

评论区

写评论
Grobycn 2021-04-25 15:50

代码的目的是将 range 范围外的bit置零。 第一个左移是多余的。对于含符号的整数类型如i32,高位并没有置零。

1 共 1 条评论, 1 页