找了很久:取反的位操作,是UC类型,先提升还是先取反?

时间:2008-08-28 06:00:54   来源:论坛整理  作者:  编辑:chinaitzhe
找了很久:取反的位操作,是UC类型,先提升还是先取反?

uc test =1;

int i = ~test;

i = ?


VC下面是先把test提升,再取反.

果先取反再提升成int那应是,0x0000 00fe

疑惑:
1 有没有c plus plus标准指定要怎么做?
找了很久没看到有什么说明.

2 而且我认为对uc取反也应是uc才对,最后才升成int,这样才是需要才转换,不需要不转换.
如uc u =~test;就不应该有什么提升.

请专家指正.
网友回复:uc是什么类型
网友回复:up 一下,

没说清,uc 一般就是说的unsigned char.
网友回复:uc应该是unsigned char吧
我认为应该是先取反再转换
因为取反运算符的优先级高于赋值运算符。

另外,:取反的位操作,是UC类型,先提升还是先取反
有区别吗?结果应该是一样的。
因为int表示的range大于uc,不会存在精度损失的

网友回复:楼上兄弟,UC提升会在前面补0的,
而先提升的话,int取反前面会出很多1的.


网友回复:先提升
网友回复:看看运行结果不就知道了~
网友回复:
引用楼主 SEUU 的帖子:
找了很久:取反的位操作,是UC类型,先提升还是先取反?

uc test =1;

int i = ~test;

i = ?


VC下面是先把test提升,再取反.

果先取反再提升成int那应是,0x0000 00fe

疑惑:
1 有没有c plus plus标准指定要怎么做?
找了很久没看到有什么说明.

2 而且我认为对uc取反也应是uc才对,最后才升成int,这样才是需要才转换,不需要不转换.
如uc u =~test;就不应该有什么提升.

请专家指正.


int i = ~test;
这里test进入寄存器,然后该寄存器和0xFF与操作,接着对该寄存器非操作,最后把该寄存器的值返回给i.
所以i的值其实是test的值先提升后取反.
网友回复:各位达人啊。。。。。
我都知道是这么个结果啦。。。。。

我要问的是为什么是这样???????
我要问的是为什么是这样???????
我要问的是为什么是这样???????
我要问的是为什么是这样???????
我要问的是为什么是这样???????
我要问的是为什么是这样???????

有没有c plus plus标准指定要怎么做??????

下面的做法是不是更合理呢????????
对uc取反也应是uc才对,最后才升成int,这样才是需要才转换,不需要不转换.
如uc u =~test;就不应该有什么提升.
网友回复:我想编译器应该在两个顺序下得到同样结果才能说是正确的
uc(~1)升为4字节是补1的
网友回复:unsigned uc=1;
unsigned int ui=~uc;
关键字:类型,操作,

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面