实验二:数的逻辑运算和移位运算 要求: 1.设计一段C语言程序,比较x和y的第n个字节(从右向左第n个字节,n的范围是从0到 3,如果是32位的话),如果相同,返回0;如果不同,则返回1。 输入:×和y为整数 输出:1或0 函数名:byteXor(int x,int y,intn) 例如,byteXor(0x12345678,0×8654321,1)=1 参考代码: byteXor(0x12345678, 0x87344321, 2)=0 int byteXor(int x, int y, int n){ x=getByte(x,n);y=getByte(y, n);return !!(x^y); int getByte(int x, int n)t return ((x>> (n<<3)) & 0xff); 提示:注意上面的n取值范围是0~3,如果是64位系统,取值范围有所不同。 2.在进行数据的奇偶冗余编码时,通常要知道一个数据编码中1的个数是奇数还是偶数编写一段C语言程序,计算x的二进制包含1的个数,如果包含奇数个1,则返回1,否则返回1。 提示:函数接口为int parityCheck(intx)。 要求两道题均含有main()函数,全部代码和实验结果分析
时间: 2024-02-18 09:02:00 浏览: 129
第一题代码及分析:
```c
#include <stdio.h>
int getByte(int x, int n) {
return ((x >> (n << 3)) & 0xff);
}
int byteXor(int x, int y, int n) {
x = getByte(x, n);
y = getByte(y, n);
return !!(x ^ y);
}
int main() {
int x = 0x12345678;
int y = 0x8654321;
printf("byteXor(0x12345678, 0x8654321, 1) = %d\n", byteXor(x, y, 1));
printf("byteXor(0x12345678, 0x87344321, 2) = %d\n", byteXor(x, 0x87344321, 2));
return 0;
}
```
分析:本题需要设计一个函数 `byteXor`,比较两个整数 `x` 和 `y` 的第 `n` 个字节是否相同,如果相同返回 `0`,否则返回 `1`。由于本题中 `n` 的取值范围是 0~3,因此可以用移位运算和按位与运算来实现获取 `x` 和 `y` 的第 `n` 个字节。最后用异或运算符 `^` 来比较两个字节是否相同,如果相同则返回 `0`,否则返回 `1`。
第二题代码及分析:
```c
#include <stdio.h>
int parityCheck(int x) {
int count = 0;
while (x) {
if (x & 1) count++;
x >>= 1;
}
return (count % 2) == 1;
}
int main() {
int x = 0b101101;
printf("parityCheck(0b101101) = %d\n", parityCheck(x));
x = 0b101010;
printf("parityCheck(0b101010) = %d\n", parityCheck(x));
return 0;
}
```
分析:本题需要设计一个函数 `parityCheck`,计算整数 `x` 的二进制包含 1 的个数,如果个数为奇数返回 `1`,否则返回 `0`。可以用循环和按位与运算来实现计算二进制中 1 的个数,然后用取模运算来判断个数是否为奇数。如果是奇数返回 `1`,否则返回 `0`。
阅读全文