cal*_*pto 2 c++ math bit-shift mathematical-optimization bitarray
计算机如何知道(int x,y)x << y意味着移位y位?我不是指转变部分.我的意思是那y部分.计算机是否将x移位1并从y中减去1直到y == 0?如果不是,计算机如何计算y的值?
如果说y = 10,那么二进制表示是0b1010.计算机不能简单地拿走1010它并使用它,可以吗?
我试图为大于8的位大小.由于值不是简单地存储为标准整数的数组,容器不表示值,因此重载运算符<<并且>>有点困难.但是,从100位数字倒计数到0有点效率低,所以我试图找到一种方法让计算机更快地理解位数.
bdo*_*lan 10
首先,在C中,执行大于所讨论类型的位宽的移位的效果是未定义的 - 换句话说,如果你有32位整数,x << 33将导致不可靠的结果(它不必为零!).
确切的实现取决于您的硬件.一些嵌入式处理器确实执行单比特移位的循环; 然而,在更强大的CPU体系结构(如x86)上,有一个机器指令可以在单个操作中执行任意移位,通常使用硬件中的桶形移位器之类的东西.移位操作数值的C限制来自不同的指令集,处理超出范围的移位值; x86将截断shift参数(即,如果使用32位值,则执行模32),但某些其他指令集体系结构可能具有不同的行为.
通常,除非您正在开发嵌入式处理器,否则您不必担心单个位移变得昂贵.