c – 以32位整数交换字节2和4
发布时间:2020-12-16 10:33:54 所属栏目:百科 来源:网络整理
导读:我有这个面试问题 – Swap byte 2 and byte 4 within an integer sequence. Integer is a 4 byte wide i.e. 32 bits 我的方法是使用char *指针和temp char来交换字节. 为清楚起见,我已经打破了步骤,否则可以考虑字符数组. unsigned char *b2,*b4,tmpc;int n
我有这个面试问题 –
我的方法是使用char *指针和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; 还有其他方法吗? 解决方法int someInt = 0x12345678; int byte2 = someInt & 0x00FF0000; int byte4 = someInt & 0x000000FF; int newInt = (someInt & 0xFF00FF00) | (byte2 >> 16) | (byte4 << 16); 为避免对签名扩展的任何担忧: int someInt = 0x12345678; int newInt = (someInt & 0xFF00FF00) | ((someInt >> 16) & 0x000000FF) | ((someInt << 16) & 0x00FF0000); (或者,要真正给他们留下深刻印象,你可以使用triple XOR technique.) 只是为了好玩(可能是某处的tupo): int newInt = someInt ^ ((someInt >> 16) & 0x000000FF); newInt = newInt ^ ((newInt << 16) & 0x00FF0000); newInt = newInt ^ ((newInt >> 16) & 0x000000FF); (实际上,我只是测试了它,它的工作原理!) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |