打印

C++符号扩展问题

[复制链接]
1103|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinadz|  楼主 | 2012-7-8 22:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近由于需要用到符号扩展,写了最简单的程序测试,结果与自己预料不符,查了资料也未能找到关键点,请高手指点一下。多谢。
c++程序中用bit field定义了
struct
{
...
unsigned int imm:16;
...
}I;

...

但是接下来在做加法时,需要对imm变量进行符号扩展,采用了如下语句
dx = ax + (int)I.imm ;
或者
dx = ax + (signed int)I.imm;
之后cout << I.imm;
符号扩展之前I.imm == 0xfff8, 做符号扩展之后 cout 得出的结果还是 I.imm == 0xfff8.
我在网上搜索到的一些资料里面也是讲说 (int)I.imm就可以做符号扩展,
所以请问,我这样做法错误的原因是什么?

相关帖子

沙发
无冕之王| | 2012-7-8 22:50 | 只看该作者
声明的时候直接用有符号数即可
typedef struct
{
  ...
  int imm:16;
  ...
}I;

使用特权

评论回复
板凳
hsbjb| | 2012-7-8 23:00 | 只看该作者
直接定义为int吧

使用特权

评论回复
地板
pkat| | 2012-7-8 23:09 | 只看该作者
(int)I.imm扩展的数imm的数值, 而不是imm本身的数据空间. 如I.imm == 0xfff8, 而(int)I.imm =0x0000FFF8

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝