📜  门| GATE-IT-2004 |第 81 题(1)

📅  最后修改于: 2023-12-03 15:28:45.858000             🧑  作者: Mango

门 GATE-IT-2004 第81题介绍

这道题目是 GATE-IT-2004 的第81题,需要对给定的 32 位无符号整数进行操作,然后输出操作后的结果。

题目描述

题目给出了一个函数 unsigned int fun(unsigned int x) 的原型,在这个函数中对一个给定的 32 位无符号整数进行以下操作:

  1. 取出这个数的前 8 位(即高 8 位),然后把它作为输出的结果。
  2. 接着先把这个数左移 8 位(即把高 8 位移到了低 8 位),然后再把这个数右移 24 位(即再把低 24 位移到了高 8 位),最后和原来的数做或运算,得到的结果就是操作后的值。

题目要求实现这个函数,并输出某个给定的数经过这个函数操作后得到的结果。

思路分析

首先,题目要求我们把给定的 32 位无符号整数分成两部分,高 8 位和低 24 位,然后输出高 8 位。这个比较简单,可以使用按位与和按位右移运算符来实现。

其次,题目还要求我们对原数进行一系列位移和或运算操作。这个操作涉及到了位运算技巧,需要一点点的分析才能理解。

按照题目要求,我们需要:

  1. 把原数左移 8 位,即把高 8 位移到低 8 位,此时原数的低 8 位应该全是 0。
  2. 把原数右移 24 位,即把低 24 位移到高 8 位,此时原数的低 8 位应该还是全是 0。
  3. 把得到的结果和原数做或运算,即把原数的高 8 位和低 24 位合并到一起。此时原数应该变成了一个新的数。
代码实现
### 题目描述

对于一个无符号整数 x,写出函数 fun,使得该函数返回的值为:

1. 取出 x 的前 8 位,作为输出结果。
2. 再把 x 左移 8 位,把 x 的低 24 位移到高 8 位,然后把所得到的结果再右移 24 位。
3. 对 x 和上一步所得到的值进行或运算,所得到的结果即为 fun(x) 的返回值。

### 输入格式

一个无符号整数 x(0 <= x <= 2^32 - 1)。

### 输出格式

fun(x) 的返回值。

### 函数声明

unsigned int fun(unsigned int x);

### 样例

输入:

```plain
102030405

输出:

102
代码实现
unsigned int fun(unsigned int x) {
    unsigned int a, b;
    a = x >> 24;  // 取出 x 的高 8 位
    b = x << 8;   // 把 x 的高 8 位移到低 8 位
    b = b >> 24;  // 把 x 的低 24 位移到高 8 位
    return a | b; // 把 x 的高 8 位和低 24 位合并到一起
}