二進位制128位整數運算

2021-07-26 05:50:45 字數 1191 閱讀 8952

gcc提供了兩種128位整數型別,分別是__int128_t和__uint128_t,分別用於宣告有符號整數變數和無符號整數變數。

有關gcc的文件參見:using the gnu compiler collection (gcc)。

這裡給出了樣例程式,是有關型別__int128_t和__uint128_t的。從計算可以看出,這兩個型別都是16位元組的,型別__uint128_t是128位的。程式中使用了按位取反運算,移位運算和乘法運算。

由於這種大整數無法使用函式printf()輸出其值,所以自己做了乙個整數轉字串函式myitoa(),用於實現128位整數的輸出。

程式設計作業系統是ubuntu15.10,使用qt編寫程式,編譯器是gcc的版本是5.2.1。

樣例程式:

#include using namespace std;

void myitoa(__int128_t v, char* s)

s[i] = '\0';

j=0;

i--;

while(j < i)

}int main()

cout << "count=" << count << endl;

cout << "__uint128_t size=" << sizeof(__uint128_t) << endl;

cout << endl;

cout << "__int128_t size=" << sizeof(__int128_t) << endl;

__int128_t x = 1100000000000000l;

__int128_t y = 2200000000000000l;

char s[40];

x *= y;

myitoa(x, s);

cout << "x=" << s << endl;

return 0;

}

程式執行結果:

count=128

__uint128_t size=16

__int128_t size=16

x=2420000000000000000000000000000

程式執行結果截圖:

二進位制位運算

與運算,6 3 2 或運算 6 3 7 異或運算 6 3 5 反碼 6 7 左移 3 2 12 3 2 2 12 右移 3 1 1 3 2 1 無符號右移 3 1 1 3 2 1 按位與,當兩位同時為1時才為1如 1 1 1 1 0 0 0 1 0 6 3相當於 0110 0011 0010 2 按...

二進位制位運算

一 按位與 位全為1,結果才為1 0 0 0 0 1 0 1 0 0 1 1 1 特殊用法 清零。如果想將乙個單元清零,就是使其全部二進位制位為0,只要與乙個各位都為零的數值相與,結果為零 取乙個數中的指定位。如x 10101110要取x的低4位,用x 00001111 00001110即可 二 按...

位運算 顛倒二進位制位

a代表某字串 a b 異或 相同為0,不同為1 若b是一串0,則a b a,a b 0 a a 0 若b是一串1,則a b a,相當於把a取反,a b a a a a 利用x x 0,可以將三個數中重複的兩個數去掉 n 相當於無符號右移,左邊會補上0 獲取11111111,只需要把0取反 得到倒數第...