#include #include #include #include using namespace std; vector do_transpose(vector m) { vector rv; int i, j; rv.resize(m.size(), 0); for (i = 0; i < m.size(); i++) { for (j = 0; j < m.size(); j++) { if (m[i] & (1 << j)) { rv[j] |= (1 << i); } } } return rv; } int main(int argc, char **argv) { int i, v, mask; vector m; vector t; for (i = 1; i < argc; i++) { if (sscanf(argv[i], "0x%x", &v) != 1) { printf("Bad command line argument %s\n", argv[i]); exit(1); } m.push_back(v); } if (m.size() > 32) { printf("Too many items in m: must be <= 32\n"); exit(0); } if (m.size() < 32) { mask = (1 << m.size()) - 1; for (i = 0; i < m.size(); i++) { if ((m[i] & mask) != m[i]) { printf("Bad item -- 0x%x -- too many bits set.\n", m[i]); } } } t = do_transpose(m); for (i = 0; i < t.size(); i++) printf("0x%x\n", t[i]); return 0; }