文章目录
- 1.对某一位置1
- 2.对某一位置0
- 3.保留最低位的1其余置0
- 4.保留高位连续的1低位置0
1.对某一位置1
若要对某一位置1,可以通过将其与对应bit为1的数相或得到,如要对4’b1000的bit1置1,则将其与4’b0010相或即可
2.对某一位置0
若要对某一位置1,可以通过将其与对应bit为1的数相或得到,如要对4’b1000的bit1置1,则将其与4’b0010相或即可
3.保留最低位的1其余置0
若要保留一个数中最低位的1其余置0,则可以通过原码&补码,如4’b1101,其反码为4’b0010,补码为0011,相与之后可以得到4’b0001,保留了bit0的1,其余位为0。
其原理如下:
首先我们用几个原码、反码和补码进行对比:
原码 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 |
---|---|---|---|---|---|---|
反码 | 1110 | 1101 | 1100 | 1011 | 1010 | 1001 |
补码 | 1111 | 1110 | 1101 | 1100 | 1011 | 1010 |
反码是对各位进行取反,补码是对反码加1。原码进行取反再加1后,原码中的最低位1也会变为1,这是因为如果此位在最低位则取反变0再加1变为1,如果不在最低位,原码中1后面的0取反后变为1,再加1层层递进,直到原码中1对应的位置,这时候此位置的反码为0,加上进位变为1,然后高位和原码都是取反的结果,因此原码和补码相与后,能够保留原码中最低位的1,其余位置0。
4.保留高位连续的1低位置0
若要保留高位连续的1低位置0(即最高位0之前的部分),则可以通过将反码和补码相与。如4’b1101,若要变为4’b1100,可以通过将反码和补码相与得到。