我看过什么是按位移位(位移)运算符以及它们如何工作?但我仍然觉得比特移位的概念很难理解.
有人能指出我在C中进行位移的更基本指导的方向.我希望它会很长,因为它需要覆盖整个主题.
我真的不明白,但我想学习它,所以任何帮助将不胜感激.
我正在学习k&r,这就是这个,所以我可以做练习.我理解基础知识,但我仍然无法做正确的位移操作.
编辑这里是K&R的表现令我难过的
练习2-6:写一个函数setbits(x,p,n,y),它返回x,其中n位位于位置p,位于y的最右边n位,其他位保持不变.
练习2-7:写一个函数invert(x,p,n),它返回x,其中n位从poisiton p开始反转(即1变为0,反之亦然),其他不变.
练习2-8:写一个函数rightrot(x,n),返回整数x的值,向右旋转n位位置
练习2-9:在二进制补码系统中,x&=(x-1)删除x中最右边的1位.解释原因,使用此观察来编写更快的bitcount版本
这些是来自k&R(c编程语言)书籍的练习,它是最好的c书,但是我在理解位移时遇到了麻烦,所以我遇到了这些练习的问题.
比特移位只不过是字面意思:向左或向右移动给定序列中的所有比特.
您需要记住的是,每个十进制数(如6,7,3,2)都表示为计算机内存中的一系列位.所以如果你在一段C代码中找到这样的东西:
(7 >> 1)
这意味着7的基础二进制表示中的位将向右移位1个位置.
我认为您引用的链接中的解释非常清楚.也许你自己在纸上写下一系列的比特并按照引用的链接操纵它们可以提供帮助.
或许您可能还不太了解计算机如何在内部处理数字.在这种情况下,在学习位移之前,您需要阅读相关内容.