2013-05-10 13 views
1

C標準和C編譯器配有固定寬度的整數類型,如uint8_tint16_t是否可以在C中創建自定義寬度的整數?

有用C限定一個128位的整數的方式,將使用相同的語義是在代碼可用作爲現有的固定寬度整數?

+3

沒有操作符重載到C中的自定義類型,所以不是真的。您需要調用add(),subtract()等函數。 – 2013-05-10 23:07:27

+0

如果您想要的行爲類似於內置類型,但實際上是具有自定義行爲的特殊類型,那麼最好使用C++對象。你可以很容易地用128位的標準整數類語義來創建一個C++對象。 – StilesCrisis 2013-05-10 23:08:52

+0

我正在研究純C代碼庫。 – merlin2011 2013-05-10 23:10:34

回答

3

你需要像GMP:

你不會得到 「確切」 的語義。

+1

但是用C++你可以。 – 2013-05-10 23:07:35

1

假設你正在編寫一個64位機器,你可以定義一個uint128_t類型爲struct兩個uint64_t s,並只實現你需要的算術運算符。在一個或另一個方向溢出的情況下,您必須手動處理從低64位到高位的攜帶位,反之亦然。 (例如,將0xFFFFFFFF加到0x00000001)。這比使用GMP等任意大小的標準庫整個庫要輕得多。舉例來說,編寫會有點棘手,但決不是不可能的 - 例如,當天8位計算機上的內置BASIC如何處理數字大於255的數字。

相關問題