cza*_*r x 3 c bit-manipulation bitwise-operators
我有这个面试问题 -
交换整数序列中的字节
2和字节4.整数是4字节宽,即32位
我的方法是使用char *pointer和a temp char来交换字节.为清楚起见,我已经打破了步骤,否则可以考虑字符数组.
unsigned char *b2, *b4, tmpc;
int n = 0xABCD; ///expected output 0xADCB
b2 = &n; b2++;
b4 = &n; b4 +=3;
///swap the values;
tmpc = *b2;
*b2 = *b4;
*b4 = tmpc;
Run Code Online (Sandbox Code Playgroud)
还有其他方法吗?
int someInt = 0x12345678;
int byte2 = someInt & 0x00FF0000;
int byte4 = someInt & 0x000000FF;
int newInt = (someInt & 0xFF00FF00) | (byte2 >> 16) | (byte4 << 16);
Run Code Online (Sandbox Code Playgroud)
为避免对签名扩展的任何担忧:
int someInt = 0x12345678;
int newInt = (someInt & 0xFF00FF00) | ((someInt >> 16) & 0x000000FF) | ((someInt << 16) & 0x00FF0000);
Run Code Online (Sandbox Code Playgroud)
(或者,为了给他们留下深刻的印象,你可以使用三重XOR技术.)
只是为了好玩(可能是某处的tupo):
int newInt = someInt ^ ((someInt >> 16) & 0x000000FF);
newInt = newInt ^ ((newInt << 16) & 0x00FF0000);
newInt = newInt ^ ((newInt >> 16) & 0x000000FF);
Run Code Online (Sandbox Code Playgroud)
(实际上,我只是测试了它,它的工作原理!)