大家帮我看一段代码
这几天正在学习按位运算符,可能是我资料太少了,就一本《C语言入门经典(第四版)》,里面的内容还是很清淅的,比较适合初学者学,就是有的知识点讲得还不够多,讲一个例子就过了,所以理解起来有点费神,通常是一个知识点要反复看好几遍才明白(也可能是我的理解能力不足),如果大家有什么好的资料的话,可以推荐给我,在这里先谢过了,好了,回到正题。按位运算符 &,|,^,~,<<,>>,这些在算二进制运算的时候我能理解,那么,再将这些按位运算符运用到变量中去我就有点不理解了,先看一段代码:
程序代码:
#include<stdio.h> int main() { unsigned int original = 0xABC; unsigned int result = 0; unsigned int mask = 0xF; printf("\n original = %X", original); result |= original&mask; original >>= 4; result <<= 4; result |= original&mask; original >>= 4; result <<= 4; result |= original&mask; printf("\t result = %X\n", result); return 0; }代码输出如下:original = ABC result = CBA
这里使用到了掩码概念。original中最右边的十六进制数是通过表达式original&mask将original和mask的值执行按位与操作而
获得的。这会把其他十六进制数设置为0。因为mask的值的二进制形式为:0000 0000 0000 1111。可以看出,只有右边的4位没有改
变。在original中,这4位都是1,在执行按位与操作的结果中,这4位仍是1,其它位都是0。这是因为0与任何值执行按位与操作,结果
都是0。选择了右边4位后,用下面语句储存结果:result |= original&mask;result的内容与右边表达式生成的十六进制数进行或操
作,为了获得original中的第二位,需要把它移动到第一个数字所在的位置。为此将original向右移动4位: original >>= 4;第一
个数字被移出,且被舍弃。为了给 original的下一个数字腾出空间,下面的语句将result的内容向左移动4位:result <<= 4;现在要
在result中插入original中的第二个数字,而当前这个数字在第一个数字的位置上,使用下面的语句:result |= original&mask;要
得到第三个数字,重复上述过程。显然,可以对任意多个数字重复这个过程。
以上一段是资料里的解释,那么这里有几个问题:
问题1:为什么说original中最右边的十六进制数是original&mask按位与操作获得的,original&mask值不是储存在result里面吗?
问题2:original的值是0xABC,二进制表示是0000 1010 1011 1100还是1010 1011 1100 0000
问题3:能不能详细解释一下掩码的概念,资料里只是说定义一个值一般称为掩码,用于选择需要的位。
问题4:由于问题实在很多,要是有高手能把代码详细的解释下那就最好。
不胜感激。