主頁 > 後端開發 > 資料的表示:原碼、反碼、補碼、移碼以及浮點數的運算

資料的表示:原碼、反碼、補碼、移碼以及浮點數的運算

2021-09-27 09:24:45 後端開發

前言

最近在備戰軟考,復習到資料表示方面相關的知識,所以在這里做一下記錄,也方便大家參考,

什么是 R 進制

對于 R 機制,如果要實作與十進制的轉換,則使用 按權展開法,其具體操作為:

R 進制數的每一位數值用 R k R^k Rk 的形式表示,即冪底數為 R,指數為 kk 與該位和小數點間的間距有關,當該位位于小數點左邊時,k 則是該位和小數點之間數碼的個數;而當該位維語小數點右邊時,則 k 是負值,其絕對值為該位和小數點之間數碼的個數加 1

比如二進制和十進制之間的轉換: 10111.01 = 1 ? 2 4 + 1 ? 2 2 + 1 ? 2 1 + 1 ? 2 0 + 1 ? 2 ? 2 10111.01 = 1* 2^4+1*2^2+1*2^1+1*2^0+1*2^{-2} 10111.01=1?24+1?22+1?21+1?20+1?2?2

再比如七進制和十進制之間的轉換: 403.02 = 4 ? 7 2 + 3 ? 7 0 + 2 ? 7 ? 2 403.02 =4*7^2+3*7^0+2*7^{-2} 403.02=4?72+3?70+2?7?2

進制之間的轉換

  1. 十進制轉 R 進制

使用 短除法,比如我們要將 100 100 100 轉換為二進制數,則有如下程序,最終的結果為 1100100 B 1100100B 1100100B

  1. 二進制轉八/十六進制

假設我們有一個二進制數 100010010011 100010010011 100010010011,如果我們要將其轉換為八進制數,一個八進制數需要 8 個基數來表示,所以需要 3 位二進制來表示,那么轉換程序如下,即對應的八進制數為 4223 O 4223O 4223O

而如果我們將要將其轉換為十六進制數,一個十六進制數需要 16 個基數來表示,所以需要 4 位二進制來表示,則對應的轉換程序如下,即對應的十六進制數為 893 H 893H 893H

碼制

計算機中,無論我們要存盤任何資料,它都會轉換為二進制碼進行存盤,現在的計算機中,如果我們要進行加法運算操作,那么我們很容易實作,因為現在的計算機體系大多采用馮諾依曼所提出的經典計算機體系結構,其中就包含了加法運算器,但如果我們要進行減法運算,那么此時就犯難了,沒有減法運算器,我們要如何實作減法運算呢?而針對這一問題,原碼、反碼、補碼就產生了,我們常用這三種碼來表示一個機器數,從而解決計算機做減法的問題,下面是幾個數的實體( 0 0 0 的補碼只有一種表現形式),下面就分別來看看幾種不同表示法的具體知識,

1-1+0-0
原碼 00000001 0000 0001 00000001 10000001 10000001 10000001 00000000 00000000 00000000 10000000 10000000 10000000
反碼 00000001 00000001 00000001 11111110 11111110 11111110 00000000 00000000 00000000 11111111 11111111 11111111
補碼 00000001 00000001 00000001 11111111 11111111 11111111 00000000 00000000 00000000 00000000 00000000 00000000
  1. 符號位

正式了解不同碼制之前,我們先來看看符號位的定義,所謂符號位,是在記憶體中存放的最左邊的一位,如果該位為 0 0 0,那么說明這個數表示的是正數;而假如該位為 1 1 1,那么就說明這個數表示的是負數,

  1. 原碼

是一種最簡單的機器數表示法,我們常用最高位來表示符號位,而用余下的其他位來存放該數二進制的絕對值,也即除開符號位之外,原碼的資料位就是一個數的二進制絕對值表示,

在上面的示例中,我們發現,雖然 0 0 0 ? 0 -0 ?0 的原碼不一致,但是主要還是符號位的不同,我們再用上面的示例來進行運算:

0001 + 0010 = 0011 , 1 + 2 = 3 0001 + 0010=0011,1 + 2 = 3 0001+0010=00111+2=3

0000 + 1000 = 1000 , 0 + ( ? 0 ) = ? 0 0000 + 1000= 1000,0 + (-0)=-0 0000+1000=10000+(?0)=?0

0001 + 1001 = 1010 , 1 + ( ? 1 ) = ? 2 0001+1001=1010,1+(-1)=-2 0001+1001=10101+(?1)=?2

可以發現,如果我們只是進行正數之間的加法運算,是不會出現問題的,但一旦出現正負數相加的情況,就會導致錯誤結果,而這主要是因為符號位所引起,那有沒有相應的解決辦法呢?別著急,我們接下來去看看反碼,

  1. 反碼

雖然原碼很簡單,但是存在的最大問題在于如果一個數加上其相反數結果不為 0 0 0,即 1 + ( ? 1 ) 1 + (-1) 1+(?1) 的結果不為 0 0 0,為了解決這個問題,才有了反碼的出現,而針對反碼,這里也分為兩種情況:

  • 如果一個數是正數,那么其反碼和原碼一樣,如 1 1 1 的原碼和反碼均為 0001 0001 0001
  • 如果一個數是負數,那么其反碼就是其原碼除符號位之外,按位取反,如 ? 1 -1 ?1 的原碼為 1001 1001 1001,其反碼為 1110 1110 1110

這個時候我們再來看看原碼中存在的問題:

0001 + 1001 = 1111 , 1 + ( ? 1 ) = ? 0 0001+1001=1111,1+(-1)=-0 0001+1001=11111+(?1)=?0

可以看到通過使用反碼,我們解決了原始碼中兩個相反數之和不為 0 0 0 的情況,但是不是就代表我們可以用反碼來進行通用減法運算呢?我們來試試兩個不同的負數相加:

1110 + 1100 = 1010 , ( ? 1 ) + ( ? 3 ) = ? 5 1110+1100=1010,(-1)+(-3)=-5 1110+1100=1010(?1)+(?3)=?5

就離譜,這結果明顯錯誤!所以反碼還是不能徹底解決減法運算的問題,而相應的,科學家們又提出了補碼這一概念,

  1. 補碼

同樣的,補碼也很特殊,針對正負數也分為了兩種情況:

  • 如果一個數是正數,那么該數的補碼等于其原碼,如 1 1 1 的原碼和補碼均為 0001 0001 0001
  • 如果一個數是負數,那么該數的補碼等于反碼 + 1 +1 +1,如 ? 1 -1 ?1 的反碼為 1110,那么其補碼即為 1111

同樣,我們來試試看反碼中進行減法運算所出現錯誤的情況:

1111 + 1111 = 1110 , ( ? 1 ) + ( ? 1 ) = ? 2 1111+1111=1110,(-1)+(-1)=-2 1111+1111=1110(?1)+(?1)=?2

誒,完美解決了反碼中兩個負數相加時所出現的結果錯誤的情況,因此在計算機中,為了避免運算錯誤,都是采用的補碼進行加減法運算,

  1. 不同碼制之間的轉換總結

經過上面的各種碼制介紹之后,我們將一個數的不同碼制之間的轉換規律總結如下圖:

碼制轉換

  1. 移碼

除開常用的原碼、反碼、補碼之外,還有一種碼制叫做移碼,所謂移碼,又叫做增碼或者偏置碼,它是在數 X X X 上增加一個偏移量來定義的,通常用來表示浮點數的階碼,其表示形式類似于補碼,只是其符號位用 1 1 1 來表示正數, 0 0 0 來表示負數,則數值表示部分則是與補碼相同,

1-1+0-0
原碼 00000001 0000 0001 00000001 10000001 10000001 10000001 00000000 00000000 00000000 10000000 10000000 10000000
反碼 00000001 00000001 00000001 11111110 11111110 11111110 00000000 00000000 00000000 11111111 11111111 11111111
補碼 00000001 00000001 00000001 11111111 11111111 11111111 00000000 00000000 00000000 00000000 00000000 00000000
移碼 10000001 10000001 10000001 01111111 01111111 01111111 10000000 10000000 10000000 00000000 00000000 00000000

數值表示范圍

在開始了解數值的表示范圍之前,我們先來了解下什么叫做定點,所謂定點,是因為小數點的位置是固定的,所以我們叫做數值是定點的整數或者小數,假如一個數值用碼制的形式表示, 如果小數點在數值最低位(也即最后邊)是,此時該數表示的是定點整數,但如果小數點在介于數值最高位和最低位的中間位置,那么此時該數所表示的就是一個定點小數,

碼制定點整數定點小數
原碼 ? ( 2 n ? 1 ? 1 ) -(2^{n-1}-1) ?(2n?1?1)~ + ( 2 n ? 1 ? 1 ) +(2^{n-1}-1) +(2n?1?1) ? ( 1 ? 2 ? ( n ? 1 ) ) -(1-2^{-(n-1)}) ?(1?2?(n?1))~ + ( 1 ? 2 ? ( n ? 1 ) ) +(1-2^{-(n-1)}) +(1?2?(n?1))
反碼 ? ( 2 n ? 1 ? 1 ) -(2^{n-1}-1) ?(2n?1?1)~ + ( 2 n ? 1 ? 1 ) +(2^{n-1}-1) +(2n?1?1) ? ( 1 ? 2 ? ( n ? 1 ) ) -(1-2^{-(n-1)}) ?(1?2?(n?1))~ + ( 1 ? 2 ? ( n ? 1 ) ) +(1-2^{-(n-1)}) +(1?2?(n?1))
補碼 ? 2 n ? 1 -2^{n-1} ?2n?1~ + ( 2 n ? 1 ? 1 ) +(2^{n-1}-1) +(2n?1?1) ? 1 -1 ?1~ + ( 1 ? 2 ? ( n ? 1 ) ) +(1-2^{-(n-1)}) +(1?2?(n?1))
移碼 ? 2 n ? 1 -2^{n-1} ?2n?1~ + ( 2 n ? 1 ? 1 ) +(2^{n-1}-1) +(2n?1?1) ? 1 -1 ?1~ + ( 1 ? 2 ? ( n ? 1 ) ) +(1-2^{-(n-1)}) +(1?2?(n?1))

假設我們用 8 個數位來表示一個數值,那么對于定點整數而言,其原碼范圍就是:

? ( 2 n ? 1 ? 1 ) -(2^{n-1}-1) ?(2n?1?1) ~ + ( 2 n ? 1 ? 1 ) , ? 127 + 127 +(2^{n-1}-1),-127~+127 +(2n?1?1),?127 +127

將其轉換為二進制就是: ? 11111111 -11111111 ?11111111 ~ 01111111 01111111 01111111,那么我們就可以得到該數值補碼的范圍: 10000000 10000000 10000000 ~ 01111111 01111111 01111111

同樣的,對于定點小數而言,我們用 8 個數位來表示,則其原碼范圍是:

? ( 1 ? 2 ? ( n ? 1 ) ) -(1-2^{-(n-1)}) ?(1?2?(n?1)) ~ + ( 1 ? 2 ? ( n ? 1 ) ) +(1-2^{-(n-1)}) +(1?2?(n?1))

同樣將其轉換為二進制: ? 0.1111111 -0.1111111 ?0.1111111 ~ + 0.1111111 +0.1111111 +0.1111111,此時我們就可以得到其對應的補碼范圍: ? 1 -1 ?1 ~ + 0.1111111 +0.1111111 +0.1111111

浮點數的運算

浮點數的表示

所謂浮點數,指的是小數點位置不固定的數,相比整數能夠表示更大的范圍,其表示格式如下:

對于一個浮點數 N N N,我們常用如下形式表示:

N = M ? R e N = M * R^e N=M?Re

其中 M M M 叫做 尾數 R R R 叫做 基數,而 e e e 則叫做 指數,其中,指數也叫做階碼,它的位數決定了數值的表示范圍,位數越多說明表示的范圍越大;而尾數的位數則決定了數值的有效精度,位數越多說明該數的精度越高,

例如對于一個整數 1000 1000 1000,用浮點數的形式表示即為 1000 = 1.0 ? 1 0 3 1000 = 1.0 * 10^3 1000=1.0?103,其中 1.0 1.0 1.0 就對應著浮點數表示形式中的尾數,而 10 10 10 則對應著基數, 3 3 3 則對應著指數,

浮點數運算

既然整數也可以用浮點數的形式表示,那我們就可以把所有的運算都看做是浮點數運算,要進行浮點數運算,我們又該如何進行呢?

我們以一個實體來看看,浮點數之間應該如何進行運算,

假設有如下兩個數: m = 1.0 ? 1 0 3 m = 1.0*10^3 m=1.0?103 n = 2.5 ? 1 0 2 n = 2.5*10^2 n=2.5?102,要對兩個數進行加法運算,

首先,我們發現兩個數的指數是不一樣的,那要進行加法運算,我們首先將其統一為一個指數,比如統一指數為 2 2 2 或者 3 3 3,按理來講,任何一個指數都是可以的,但如果我們轉換為小的指數( 2 2 2),那么 m = 10.0 ? 1 0 2 m = 10.0*10^2 m=10.0?102,讓其與 n n n 進行加法運算得到的結果到時候又需要轉換為大的指數( 2 ? > 3 2 -> 3 2?>3),此時就顯得比較麻煩,所以為了避免結果運算之后再次進行指數的轉換,我們 一般推薦統一為大的指數( 3 3 3,所以我們統一指數之后,得到的兩個數分別是:

m = 1.0 ? 1 0 3 m = 1.0*10^3 m=1.0?103

n = 0.25 ? 1 0 3 n=0.25*10^3 n=0.25?103

指數統一之后,我們再來計算尾數,此時尾數則為 1.0 + 0.25 = 1.25 1.0+0.25=1.25 1.0+0.25=1.25

最后,我們既然得到了尾數、指數和基數,那么對結果進行格式化操作,得到 m + n = 1.25 ? 1 0 3 m + n=1.25*10^3 m+n=1.25?103,注意這里比較特殊,因為我們的結果是很規范的浮點數(即尾數小數點的左邊既不能為 0 0 0,也不能是 1 1 1 位以上的數),假設我們的浮點數不是規范的浮點數,那么則需要對其進行格式化操作,

總結起來浮點數的運算程序就是:

對階 -> 尾數計算 -> 格式化結果

總結

好了,以上就是今天的所有內容了,

主要講了關于 R 進制的表示,以及如何與十進制進行轉換,然后對常見的進制之間的轉換做了介紹,接著則是對原碼、反碼、補碼、移碼等不同碼制之間的轉換,最后則是對數值表示范圍進行了介紹,以及浮點數運算的相關知識進行補充,

創作不易,如果你覺得我的文章內容對你有所幫助,那就點個贊再走吧!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/303311.html

標籤:java

上一篇:一個月爆肝一個基于SpringBoot的在線教育系統【原始碼開源】【建議收藏】

下一篇:Python小測驗 ?2021最新男女顏值打分小系統標準出爐,看哭無數人...

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more