【基础算法】位运算之lowbit操作
lowbit作用:快速找到一个数中二进制的最后一个1以及后面所有0的组合
lowbit核心:一个数的原码 & 补码(即该数的负数)
举个例子:
原码 = 101010101000000
补
我认为宏观来看进制只是表示“值”的方式,不管是几进制,这个“值”都是客观存在的东西。计算机采用二进制是由现阶段物质条件因素而采取的“最优方式”。
仔细想一想,脱离“原码取反加一”之类的运算规则,补码更像是“反方向走的时针 ”。如果要做7进制的运算,就先假设有一块从0到6的时钟,假设需要从0时走到1时,有两条路:“顺时针走1,”和“逆时针走6”,显然两者在7进制的规则下是“互补的”,只是假设人为的规定顺时针为正,那么逆时针就为负,那么想加运算就进行顺时针运算,减运算就是逆时针运算,但两者可以“相互转换”达到同一效果。在不同进制规则下,“补码”就好像是一个正数在参与计算时体现出了负数的性质。
我以前看到一种说法,不知道正不正确:
比如一个数减一个数,可以写成加这个数的负数。
所以:1+(-1)=0,然后 (-1)=0-1;
根据电路的特点,超出位数不会记录, 0=0b1111+0b0001 成立;
(-1)=(0b1111+0b0001)-0b0001=0b1111;