如何使用按位运算符将int转换为short int?

时间:2014-04-03 06:15:13

标签: c++

例如:

short a = 10;
int b = a & 0xffff;

同样,如果我想从int转换为short,我该如何使用按位运算符?我不想使用(short)使用常规的投射。

3 个答案:

答案 0 :(得分:1)

如果您想要签名扩展名:

int b = a;

如果不这样做(即a的负值将产生(奇怪的)b的正值

// note that Standard Conversion of shorts to int happens before &
int b = a & std::numeric_limits<unsigned short>::max();

答案 1 :(得分:1)

对签名类型执行位操作可能不是一个好主意,并导致令人惊讶的结果:Are the results of bitwise operations on signed integers defined?。为什么需要位操作?

short int2short(int x) {
    if (x > std::numeric_limits<short>::max()) {
        // what to do now? Throw exception, return default value ...
    }
    else if (x < std::numeric_limits<short>::min()) {
        // what to do now? Throw exception, return default value ...
    } else
    {
        return static_cast<short>(x);
    }
} 

这可以概括为模板方法,并且还有针对错误情况的策略。

答案 2 :(得分:0)

为什么不使用(short)?这是最简单的方法,可以得到你想要的东西。

除非它是一个面试问题,否则你需要假设一个short和一个int包含多少位。如果数字为正数,则只使用按位AND。如果数字为负数,则将其翻转为正数,然后按位AND。在AND之后,您需要将最高位更改为1.