我看过什么是按位移位(bit-shift)运算符以及它们如何工作? https://stackoverflow.com/questions/141525/absolute-beginners-guide-to-bit-shifting,但我仍然觉得位移位的概念很难理解。
有人能给我指点关于 C 语言位移的更基本指南吗?我预计它会很长,因为它需要涵盖整个主题。
我正在学习C 编程语言 https://en.wikipedia.org/wiki/The_C_Programming_Language(又名 K&R),这就是这个的目的,所以我可以做练习。我了解基础知识,但我仍然无法进行正确的位移操作。
以下是 K&R 中困扰我的练习
练习 2-6:编写一个函数 setbits(x, p, n, y),返回 x,并将从位置 p 开始的 n 位设置为 y 最右边的 n 位,其他位保持不变。
练习 2-7:编写一个函数 invert(x, p, n),返回 x,其中从位置 p 开始的 n 位反转(即 1 变为 0,反之亦然),其他不变。
练习 2-8:编写一个函数 rightrot(x, n),返回整数 x 向右旋转 n 位位置的值
练习2-9:在二进制补码系统中,x &= (x-1) 删除x 中最右边的1 位。解释原因,并利用这一观察结果编写更快版本的 bitcount。
这些是 k&R(C 编程语言)书中的练习。这是最好的 C 书籍,但我在理解位移位方面遇到了困难,所以我在这些练习中遇到了问题。