将较低的字节(0-7)与较高的字节(8-15)交换一个

时间:2015-04-02 15:37:47

标签: c++ c

我现在知道它是如何在一行中完成的,尽管我没有意识到为什么我的初稿也不起作用。我要做的是将下半部分保存到另一个变量中,将高位字节向右移动并通过OR添加两个数字。但是,它只是切割十六进制的下半部分并返回其余部分。

short int method(short int number) {


short int a = 0;
for (int x = 8; x < 16; x++){
    if ((number & (1 << x)) == 1){
        a = a | (1<<x);
    }
}

    number = number >> 8;

short int solution = number | a;
return solution;

2 个答案:

答案 0 :(得分:8)

你一次只做一点;更好的方法是通过一次操作来实现:

uint16_t method(uint16_t number) {
    return (number << 8) | (number >> 8);
}

上面的代码明确指定了16位无符号类型,从而避免了与符号扩展相关的问题。您需要在{C ++中包含<stdint.h>(或<cstdint>)才能进行编译。

答案 1 :(得分:4)

if ((number & (1 << x)) == 1)

如果x为0,则仅返回true。因为二进制中的1是00000000 00000001,而1 << x将除了第x位之外的所有位都设置为0。

你不在乎它是否为1,你只关心它是否为非零。使用

if (number & (1 << x))