簡體   English   中英

1字節無符號整數c ++

[英]1 byte unsigned integer c++

我編寫了一個名為HugeInteger的類,它可以使用“無限”大小的數字進行算術運算(加,子,乘)。 它將數字中的每位數字視為獨立數字(例如1234 = 1,2,3和4)。 我將這些數字存儲在矢量(vector<short>) 現在,因為每個數字只能取0到9之間的值,所以我真的不需要將它們存儲為2字節數字。 有沒有辦法(不使用char)將數字存儲為1字節無符號整數? 謝謝!

更新:

vector<unsigned char> v;
v.push_back(1);
v.push_back(2);

for (size_t i = 0; i < v.size(); i++)
    cout << v[i];

這會產生不需要的輸出。 我應該使用哪種數據類型來迭代向量?

是的,使用unsigned char

如果<stdint.h>可用,那么您也可以使用uint8_t

不要讓標准的編譯器類型char混淆你; 以下是完全合法的:

char number[5] = { 1, 4, 3, 6, 2};   // Representation of decimal 14,362

並不是說char類型有什么特別的東西會迫使你把它們想象成字符; 相反,它只是1個字節的方便大小,這使得它們適合保存諸如printf庫例程使用它們來保存1字節值的值,它將在合適的編碼下解釋為字符。

uint_least8_t是用於存儲單個十進制數字的最緊湊的數據類型。

如果您的系統支持大小為1字節的數據類型,那么就是這樣。 否則它將是可用的下一個最小數據類型。

您可能需要在使用流插入運算符時強制轉換值,以確保獲得數字輸出而不是字符處理。

你在無符號字符上使用cout <<時看到的輸出是與std :: ostream一起使用的<<運算符的機制(具體來說,運算符<<的不同重載將以不同的方式顯示值) - char / unsigned char重載通常假設你想要一個字符表示而不是數字表示

unsigned char的底層表示仍然是你推入向量的數字 - unsigned char仍然是無符號的1字節整數

如果你想改變輸出,那么你需要避免使用為char或unsigned char設計的<<運算符的重載 - 最簡單的方法是執行轉換

vector<unsigned char> v;
v.push_back(1);
v.push_back(2);

for (size_t i = 0; i < v.size(); i++)
    cout << static_cast<int>( v[i] );

使用char或unsigned char作為1字節整數類型並不總是那么簡單...有時您只需要類型為數字類型,而不是字符類型。 這里有一個這樣的例子: 1字節整數數據類型其他是當你為幾種不同類型的參數重載函數時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM