概要
bit 行列演算
Table 1. namespace sstd
Table 2. 演算子
Table 1. namespace sstd
| プロトタイプ宣言 | 動作説明 |
|---|---|
| void copy(class sstd::bmat& lhs, class sstd::bmat& rhs); | |
| void move(class sstd::bmat& lhs, class sstd::bmat& rhs); | |
| void eye(class sstd::bmat& bMat); | |
| void ones(class sstd::bmat& bMat); | |
| void zeros(class sstd::bmat& bMat); | |
| class sstd::bmat eye(const uint& row, const uint& col); | |
| class sstd::bmat ones(const uint& row, const uint& col); | |
| class sstd::bmat zeros(const uint& row, const uint& col); | |
| class sstd::bmat eye(const uint& size); | |
| class sstd::bmat ones(const uint& size); | |
| class sstd::bmat zeros(const uint& size); | |
| class sstd::bmat LxShiftMat(uint size, uint xShift); | square matrix [size x size] |
| class sstd::bmat RxShiftMat(uint size, uint xShift); | square matrix [size x size] |
| class sstd::bmat Tr(class sstd::bmat& rhs); | lhs = Transpose(rhs) |
| void Tr_myself(class sstd::bmat& rhs); | Transpose(rhs) |
| class sstd::bmat REShift(class sstd::bmat& rhs, uint ShiftNum); | RightExpansionShift, 行列拡大右シフト |
| class sstd::bmat DEShift(class sstd::bmat& rhs, uint ShiftNum); | DownExpansionShift, 行列拡大下シフト |
| void print(class sstd::bmat& mat); | |
| void printn(class sstd::bmat& mat); | |
| void printn_all(class sstd::bmat& mat); |
Table 2. 演算子
| 演算子 | 動作説明 |
|---|---|
| = | 代入 |
| + | bit 和 |
| * | bit 積 |
| ^ | 累乗 |
| & | bit and |
| | | bit or |
| ~ | bit 反転 |
| += | |
| *= | |
| ^= | |
| &= | |
| |= | |
| == | 等しい |
| != | 等しくない |
| << | ビット行列の水平結合 |
| && | ビット行列の垂直結合 |
| [] | 要素アクセス (1値, 列優先) [i] |
| () | 要素アクセス (2値) (p, q) |
使用例
#include <sstd/sstd.hpp> int main(){ // init test sstd::bmat bMat4x4(4, 4); sstd::eye(bMat4x4); sstd::printn(bMat4x4); sstd::ones(bMat4x4); sstd::printn(bMat4x4); sstd::zeros(bMat4x4); sstd::printn(bMat4x4); sstd::print(bMat4x4); // for print debug sstd::print_all(bMat4x4); // for bmat debug // Internaly, the bit matrix is processed as a set of 8x8 matrices. sstd::bmat bonded8x8 = sstd::zeros(4, 4) << sstd::eye(4, 4) && sstd::ones(4, 4) << sstd::eye(4, 4); sstd::printn(bonded8x8); sstd::bmat bMat8x9 = sstd::eye(8, 9); sstd::printn(bMat8x9); sstd::print_all(bMat8x9); // for debug // Internaly, the bit matrix is processed as a set of 8x8 matrices. sstd::printn(bMat8x9.rows()); sstd::printn(bMat8x9.cols()); printf("\n"); // access to elements sstd::bmat M = sstd::zeros(4, 4); M(0, 1) = 1; M(1, 2) = 1; M(2, 3) = 1; M(3, 4) = 1; sstd::printn(M); sstd::printn(M*M); // multi // tranpose sstd:: bmat M_tr = M; // copy sstd::Tr_myself(M_tr); sstd::printn(M_tr); sstd::printn(sstd::Tr(M)); // pow test sstd::bmat L1 = sstd::LxShiftMat(16, 1); sstd::printn(L1); sstd::bmat L7 = L1^((uint64)7); // この計算は後で確認して!!! sstd::printn(L7); uint N = 32; sstd::bmat I(N, N); sstd::eye(I); sstd::bmat L15 = sstd::LxShiftMat(N, 15); sstd::bmat R17 = sstd::RxShiftMat(N, 17); sstd::bmat L13 = sstd::LxShiftMat(N, 13); sstd::bmat T = (I + L15)*(I + R17)*(I + L13); sstd::printn(T); sstd::bmat Tp = T^(4294967296-1); // XORSHIFT sstd::printn(Tp); printf("Tp==I: "); if(Tp==I){ printf("true\n"); }else{ printf("false\n"); } printf("Tp!=I: "); if(Tp!=I){ printf("true\n"); }else{ printf("false\n"); } printf("I(0, 0): "); if(I(0, 0)){printf("true\n");}else{printf("false\n");} printf("I(1, 0): "); if(I(1, 0)){printf("true\n");}else{printf("false\n");} printf("I(0, 1): "); if(I(0, 1)){printf("true\n");}else{printf("false\n");} printf("I(1, 1): "); if(I(1, 1)){printf("true\n");}else{printf("false\n");} I = sstd::eye(4, 4); sstd::printn(I); I(0, 0) = false; I(1, 1) = false; I(0, 1) = 1; I(0, 2) = 1000; // "I(0, 2) = 1000;" に同じ. // I(1, 0) = I(2, 0) = I(2, 2); I(1, 0) = I(2, 0) = I(2, 2) = true; sstd::printn(I); sstd::printn(I); I[0] = false; I[1] = true; I[2] = I[3] = I[15]; I[4] = I[5] = true; I[6] = I[7] = I(2, 2); I(2, 2) = I[0]; sstd::printn(I); }
実行結果
$ ./exe.exe bMat4x4 = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 bMat4x4 = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 bMat4x4 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 bonded8x8 = 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 0 1 0 1 1 1 1 0 0 0 1 bMat8x9 = 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 bMat8x9.rows() = 8 bMat8x9.cols() = 9 M = 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 M*M = 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 M_tr = 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 sstd::Tr(M) = 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 L1 = 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 L7 = 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T = 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 Tp = 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 Tp==I: true Tp!=I: false I(0, 0): true I(1, 0): false I(0, 1): false I(1, 1): true I = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 I = 0 1 1 0 1 0 0 0 1 0 1 0 0 0 0 1 I = 0 1 1 0 1 0 0 0 1 0 1 0 0 0 0 1 I = 0 1 1 0 1 1 0 0 1 1 0 0 1 1 0 1
実装
0 件のコメント:
コメントを投稿