~的优先级与>>的优先级问题

hahali 2011-08-21 08:38:37

#include <iostream>
using namespace std;

int main(void)
{
unsigned char a = 0xA5;
unsigned char b = ~a>>4;
printf("%d\n", b);
return 0;
}

求b的值。
...全文
326 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hahali 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jake443403168 的回复:]
帮你查了一下书,~优先级高于>>
[/Quote]
这个我知道,只有结果不是那样的才发帖求助的!
hahali 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lthyxy 的回复:]
我又不是你的是电脑
[/Quote]
不知道答案不要回帖
赵4老师 2011-08-22
  • 打赏
  • 举报
回复
记不住就加括号。
Operator Precedence and Associativity
The table below lists the C and C++ operators and their precedence and associativity values. The highest precedence level is at the top of the table.

Symbol Name or Meaning Associativity
Highest Precedence
++ Post-increment Left to right
-- Post-decrement
( ) Function call
[ ] Array element
-> Pointer to structure member
. Structure or union member
++ Pre-increment Right to left
-- Pre-decrement
! Logical NOT
~ Bitwise NOT
- Unary minus
+ Unary plus
& Address
* Indirection
sizeof Size in bytes
new Allocate program memory
delete Deallocate program memory
(type) Type cast [for example, (float) i]
.* Pointer to member (objects) Left to right
->* Pointer to member (pointers)
* Multiply Left to right
/ Divide
% Remainder
+ Add Left to right
- Subtract
<< Left shift Left to right
>> Right shift
< Less than Left to right
<= Less than or equal to
> Greater than
>= Greater than or equal to
== Equal Left to right
!= Not equal
& Bitwise AND Left to right
^ Bitwise exclusive OR Left to right
| Bitwise OR Left to right
&& Logical AND Left to right
|| Logical OR Left to right
? : Conditional Right to left
= Assignment Right to left
*=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= Compound assignment
, Comma Left to right
Lowest Precedence

we_sky2008 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 we_sky2008 的回复:]
楼主,这个不是优先级的问题,是整值提升的原因
小于整型的数据类型在参加计算之前会首先提升为int类型,

C/C++ code


unsigned char a = 0xA5;//32位下,a在参加下面的~a之前会先整值提升为0x000000A5;
unsigned char b = ~a>>4;//所以~a == 0xFFFFFFA5,当右移是逻辑移位时,~a >……
[/Quote]
修改下,刚才取反时值搞错了,应该是:

升为0x000000A5;
unsigned char b = ~a>>4;//所以~a == 0xFFFFFF5A,当右移是逻辑移位时,~a >> 4 == 0x0FFFFFF5;,当右移是算术移位时,,~a >> 4 == 0xFFFFFFF5;当赋值时发生截断之后,b的值都是0xF5
sunnyorange 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 we_sky2008 的回复:]

楼主,这个不是优先级的问题,是整值提升的原因
小于整型的数据类型在参加计算之前会首先提升为int类型,
C/C++ code

unsigned char a = 0xA5;//32位下,a在参加下面的~a之前会先整值提升为0x000000A5;
unsigned char b = ~a>>4;//所以~a == 0xFFFFFFA5,当右移是逻辑移位时,~a >> 4 =……
[/Quote]

学习了~~
we_sky2008 2011-08-22
  • 打赏
  • 举报
回复
楼主,这个不是优先级的问题,是整值提升的原因
小于整型的数据类型在参加计算之前会首先提升为int类型,

unsigned char a = 0xA5;//32位下,a在参加下面的~a之前会先整值提升为0x000000A5;
unsigned char b = ~a>>4;//所以~a == 0xFFFFFFA5,当右移是逻辑移位时,~a >> 4 == 0x0FFFFFFA;,当右移是算术移位时,,~a >> 4 == 0xFFFFFFFA;当赋值时发生截断之后,b的值都是0xFA
hahali 2011-08-22
  • 打赏
  • 举报
回复
可是VC6的运行结果是>>的优先级高于~
AnYidan 2011-08-21
  • 打赏
  • 举报
回复
单目运算符的优先级高于双目的
luciferisnotsatan 2011-08-21
  • 打赏
  • 举报
回复
不确定优先级时,就加括号。
turing-complete 2011-08-21
  • 打赏
  • 举报
回复
分不清的时候,就更要加括号,不要靠默认优先级。 类似于*p++这种常用的及以下就行了,其他的就别扯了
u_buntu 2011-08-21
  • 打赏
  • 举报
回复
楼上的几位都是正解啊
建议楼主也这样做,即方便自己,也方便他人

------------------------------

更多技术文章敬请关注:武汉华嵌-嵌入式培训专家,国内领先的嵌入式服务机构,

http://www.embedhq.org
bravery36 2011-08-21
  • 打赏
  • 举报
回复
我宁可加括号也不想思考这种优先级的问题,反正效率是一样的,您就不能让人省点心么。
Jake443403168 2011-08-21
  • 打赏
  • 举报
回复
帮你查了一下书,~优先级高于>>
liutengfeigo 2011-08-21
  • 打赏
  • 举报
回复
俺不是你们那么干的。
pathuang68 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jackyjkchen 的回复:]

爷从来不记优先级,搞不清楚就加括号,谁也不能吐槽我说我代码丑
[/Quote]

++

俺也是这么干的。

如果楼主非要搞清它们的优先级,用代码实验一下,或者查查书不就很清楚了嘛。
jackyjkchen 2011-08-21
  • 打赏
  • 举报
回复
爷从来不记优先级,搞不清楚就加括号,谁也不能吐槽我说我代码丑
liutengfeigo 2011-08-21
  • 打赏
  • 举报
回复
我又不是你的是电脑

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧