找了很久:取反的位操作,是UC类型,先提升还是先取反?
时间:2008-08-28 06:00:54
来源:论坛整理 作者: 编辑:chinaitzhe
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的.
网友回复:先提升
网友回复:看看运行结果不就知道了~
网友回复:
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 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面