➜ test ./a.out orig v = 1001100110001000011101110110011001010101010001000011001100100010 orig s = 0000000000000000000000000000000000000000000000000000000001000000 orig mask = 1111111111111111111111111111111111111111111111111111111111111111
mask << s = 1111111111111111111111111111111100000000000000000000000000000000 mask ^ (mask << s) = 0000000000000000000000000000000011111111111111111111111111111111 (v >> s) = 0000000000000000000000000000000010011001100010000111011101100110 (v >> s) & mask = 0000000000000000000000000000000010011001100010000111011101100110 (v << s) = 0101010101000100001100110010001000000000000000000000000000000000 (v << s) & ~mask = 0101010101000100001100110010001000000000000000000000000000000000 ((v>>s)&mask)|((v<<s)&~mask) = 0101010101000100001100110010001010011001100010000111011101100110
v = 0101010101000100001100110010001010011001100010000111011101100110 s = 0000000000000000000000000000000000000000000000000000000000100000 mask = 0000000000000000000000000000000011111111111111111111111111111111
mask << s = 0000000000000000111111111111111111111111111111110000000000000000 mask ^ (mask << s) = 0000000000000000111111111111111100000000000000001111111111111111 (v >> s) = 0000000000000000010101010100010000110011001000101001100110001000 (v >> s) & mask = 0000000000000000010101010100010000000000000000001001100110001000 (v << s) = 0011001100100010100110011000100001110111011001100000000000000000 (v << s) & ~mask = 0011001100100010000000000000000001110111011001100000000000000000 ((v>>s)&mask)|((v<<s)&~mask) = 0011001100100010010101010100010001110111011001101001100110001000
v = 0011001100100010010101010100010001110111011001101001100110001000 s = 0000000000000000000000000000000000000000000000000000000000010000 mask = 0000000000000000111111111111111100000000000000001111111111111111
mask << s = 0000000011111111111111110000000000000000111111111111111100000000 mask ^ (mask << s) = 0000000011111111000000001111111100000000111111110000000011111111 (v >> s) = 0000000000110011001000100101010101000100011101110110011010011001 (v >> s) & mask = 0000000000110011000000000101010100000000011101110000000010011001 (v << s) = 0010001001010101010001000111011101100110100110011000100000000000 (v << s) & ~mask = 0010001000000000010001000000000001100110000000001000100000000000 ((v>>s)&mask)|((v<<s)&~mask) = 0010001000110011010001000101010101100110011101111000100010011001
v = 0010001000110011010001000101010101100110011101111000100010011001 s = 0000000000000000000000000000000000000000000000000000000000001000 mask = 0000000011111111000000001111111100000000111111110000000011111111
mask << s = 0000111111110000000011111111000000001111111100000000111111110000 mask ^ (mask << s) = 0000111100001111000011110000111100001111000011110000111100001111 (v >> s) = 0000001000100011001101000100010101010110011001110111100010001001 (v >> s) & mask = 0000001000000011000001000000010100000110000001110000100000001001 (v << s) = 0010001100110100010001010101011001100111011110001000100110010000 (v << s) & ~mask = 0010000000110000010000000101000001100000011100001000000010010000 ((v>>s)&mask)|((v<<s)&~mask) = 0010001000110011010001000101010101100110011101111000100010011001
v = 0010001000110011010001000101010101100110011101111000100010011001 s = 0000000000000000000000000000000000000000000000000000000000000100 mask = 0000111100001111000011110000111100001111000011110000111100001111
mask << s = 0011110000111100001111000011110000111100001111000011110000111100 mask ^ (mask << s) = 0011001100110011001100110011001100110011001100110011001100110011 (v >> s) = 0000100010001100110100010001010101011001100111011110001000100110 (v >> s) & mask = 0000000000000000000100010001000100010001000100010010001000100010 (v << s) = 1000100011001101000100010101010110011001110111100010001001100100 (v << s) & ~mask = 1000100011001100000000000100010010001000110011000000000001000100 ((v>>s)&mask)|((v<<s)&~mask) = 1000100011001100000100010101010110011001110111010010001001100110
v = 1000100011001100000100010101010110011001110111010010001001100110 s = 0000000000000000000000000000000000000000000000000000000000000010 mask = 0011001100110011001100110011001100110011001100110011001100110011
mask << s = 0110011001100110011001100110011001100110011001100110011001100110 mask ^ (mask << s) = 0101010101010101010101010101010101010101010101010101010101010101 (v >> s) = 0100010001100110000010001010101011001100111011101001000100110011 (v >> s) & mask = 0100010001000100000000000000000001000100010001000001000100010001 (v << s) = 0001000110011000001000101010101100110011101110100100010011001100 (v << s) & ~mask = 0000000010001000001000101010101000100010101010100000000010001000 ((v>>s)&mask)|((v<<s)&~mask) = 0100010011001100001000101010101001100110111011100001000110011001
v = 0100010011001100001000101010101001100110111011100001000110011001 s = 0000000000000000000000000000000000000000000000000000000000000001 mask = 0101010101010101010101010101010101010101010101010101010101010101