在C中将符号扩展名从16位扩展到32位 [英] Sign extension from 16 to 32 bits in C

查看:1016
本文介绍了在C中将符号扩展名从16位扩展到32位的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须为16位整数执行符号扩展,出于某种原因,它似乎无法正常工作。谁能告诉我代码中的bug在哪里?我已经工作了几个小时。

I have to do a sign extension for a 16-bit integer and for some reason, it seems not to be working properly. Could anyone please tell me where the bug is in the code? I've been working on it for hours.

int signExtension(int instr) {
    int value = (0x0000FFFF & instr);
    int mask = 0x00008000;
    int sign = (mask & instr) >> 15;
    if (sign == 1)
        value += 0xFFFF0000;
    return value;
}

指令(instr)是32位,在里面我有一个16位数字。

The instruction (instr) is 32 bits and inside it I have a 16bit number.

推荐答案

尝试:

int signExtension(int instr) {
    int value = (0x0000FFFF & instr);
    int mask = 0x00008000;
    if (mask & instr) {
        value += 0xFFFF0000;
    }
    return value;
}

这篇关于在C中将符号扩展名从16位扩展到32位的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆