【发布时间】:2014-02-21 09:11:02
【问题描述】:
编写一个程序,将位置 3、4 和 5 上的位的值与给定的位置 24、25 和 26 上的位交换 32 位无符号整数。
所以上面是练习,下面是我的工作。
int number = 28; //number -0001 1100 28
int bit3 = (number >> 3) & 1; //obtain bit 3rd bit from left -0000 0001 1
int bit3return = bit3 << 3; //return bit to possition -0000 1000 8
int numberReturn = number & (~(bit3return)); //number with bit place reversed -0001 0100 20
int number2 = 20; //number -0001 0100 20
int bit3Return = 1 << 3; //return bit to possition -0000 1000 8
int numberReturn2 = number2 + bit3Return; //number with bit place reversed -0001 0100 28
这是我的最终代码。
Console.WriteLine("Enter a number to be modified:");
int num = int.Parse(Console.ReadLine());
int b3 = (num >> 3) & 1;
int b4 = (num >> 4) & 1;
int b5 = (num >> 5) & 1;
int b24 = (num >> 24) & 1;
int b25 = (num >> 25) & 1;
int b26 = (num >> 26) & 1;
num = num & (~(1 << b24)) | (b3 << 24);
num = num & (~(1 << b3)) | (b24 << 3);
num = num & (~(1 << b25)) | (b4 << 25);
num = num & (~(1 << b4)) | (b25 << 4);
num = num & (~(1 << b26)) | (b5 << 26);
num = num & (~(1 << b5)) | (b26 << 5);
Console.WriteLine(num);
问题是,它不起作用:
我输入56,即:
0000 0000 0000 0000 0000 0000 0011 1000
输出应该是 117440512 即:
0000 0111 0000 0000 0000 0000 0000 0000
但是我得到 117440568 是:
0000 0111 0000 0000 0000 0000 0011 1000
如果我输入 117440512 我得到相同的输出,所以 0 变成 1 但 1 不会变成 0。请帮忙。
【问题讨论】:
-
您添加了新值但没有删除旧值? (异或/或)
-
您可能要考虑可以在一次操作中提取所有 3 个低位(或所有 3 个高位)。而且您不必将它们向下移动到位位置 0。
标签: c# bit-manipulation bitwise-operators