在 C 語言中符號擴充套件 9 位

Muhammad Zeeshan 2023年10月12日
  1. 什麼是符號擴充套件
  2. 用 C 符號擴充套件 9 位整數
在 C 語言中符號擴充套件 9 位

在本教程中,我們將學習如何在 C 語言中對 9 位整數進行符號擴充套件。首先,我們必須知道符號擴充套件到底是什麼。

什麼是符號擴充套件

符號擴充套件是指擴充套件一個數字,同時保持其符號位,例如,從 32 位變為 64 位。在當今使用的數字形式中,符號位始終是最高的。

這只是一個傳統問題,但據我們所知,情況總是如此。這表明我們需要將最關鍵數字的部分移動到新的最高位置,同時保持數字其他部分的完整性。

用 C 符號擴充套件 9 位整數

C 程式語言中的一些位運算子在硬體級別上執行。但是,要使用這些運算子,必​​須瞭解記憶體的架構以及 C 如何將資料儲存在記憶體中。

結構:

  1. 對於 char 型別的每個字元,記憶體被劃分為 1 個位元組。
  2. int 型別的記憶體結構由 4 個位元組組成。
  3. short 型別的記憶體位置由 2 個位元組組成。

關於標誌的資訊可以在最左邊的部分找到。數字 1 表示負數,而數字 0 表示正數。

讓我們看一下以下示例,以更好地理解所討論的內容。

首先,在 main() 類中,我們將建立一個 short 型別的變數並將其命名為 val。然後,我們將以與下面相同的方式分配變數。

short val = 234;

之後,我們將把我們製作的 short 值與一個 9 位數字一起提供給名為 res 的變數。

int res = val & 0b0000000111111111;

應用 if 檢查。這將檢查符號位,即你保持 (0x100) 的最高位是否已設定,如果是,則將其後的所有位置於其後。

if (val & 0x100) {
  res = res | 0xFE00;
}

解釋:

我們建立了一個 val 變數,一個在記憶體中具有 16 位的小整數。然後使用& 運算子來遮蔽最近的 9 位。

它是按位運算中使用的 AND 運算子,其過程如下所述。

X   Y   res
0   0   0
0   1   0
1   0   0
1   1   1
  1. res 代表結果,XY 代表許多輸入選項。計算是一點一點進行的。

    如果具有相同有效值的兩個位都是 1,它只會產生 1。

  2. 因此,我們可以將值的最後 9 位按位 AND 運算子分開,其餘位將設定為 0。值 0b0000000111111111 對應於二進位制表示。

    這表明只有最近的 9 位包含 1,而其餘的包含 0。res 變數將使用結果更新。

  3. 之後,我們使用 if 檢查來驗證第一位。如果它是 1,我們將它新增到結果中。否則,我們將其保留為 0。

為此,我們再次使用按位 AND 運算子,這次我們只提取第一位,如果答案為 1,則使用|運算子,它是按位 OR 運算子,工作方式如下。

X   Y   res
0   0   0
0   1   1
1   0   1
1   1   1
  1. res 是輸出,XY 是輸入可能性。是一點一點計算出來的。

    如果兩個相同的有效位都是 0,它只輸出 0。在 if 語句中,評估此運算子的結果。

    如果 true,按位 OR 運算子用於在結果的最左邊插入 1。

  2. 0xFE00 是二進位制數的十六進位制表示,如果存在符號位,則用於設定其上方的位。

通過利用 C 語言中的位運算子,我們可以執行各種其他操作。C 語言中的按位運算子比按位 AND 和按位 OR 多得多。

有按位 XOR 表示為^符號。 ~ 符號表示按位 NOT 運算子。

>> 符號表示左移運算子。你可以使用 << 符號進行右移。

在這些操作員的幫助下,你可以通過多種方式完成這項工作或任何其他所需的工作。

完整的原始碼:

#include <stdio.h>

int main() {
  short val = 234;
  int res = val & 0b0000000111111111;
  if (val & 0x100) {
    res = res | 0xFE00;
  }
  return 0;
}
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn