源码在getbits函数里有一句
if (len<=0||32<=len||!(bits&(1u<<(len-1)))) return (int)bits;
return (int)(bits|(~0u<<len));
当最高位为1时,返回值取负,源码取负操作是高位全补成1,这样补1并不能对数据取负,计算机里取负操作是
a=~a+1,即取反再加1,源码这么做并不能取负,但是计算结果是对的,为什么?
if (len<=0||32<=len||!(bits&(1u<<(len-1)))) return (int)bits;
return (int)(bits|(~0u<<len));
当最高位为1时,返回值取负,源码取负操作是高位全补成1,这样补1并不能对数据取负,计算机里取负操作是
a=~a+1,即取反再加1,源码这么做并不能取负,但是计算结果是对的,为什么?