~和>>的优先级有关问题
~和>>的优先级问题
书上不是说~要比>>的优先级高么,但是为什么下面这段代码是先计算>>?
#include "stdafx.h"
int main()
{
unsigned char a=0xA5;
unsigned char b=~a>>4;
printf("%d",b);
return 0;
}
------解决方案--------------------
小于int类型长度的数据类型的数据在参加运算之前会先提升为int类型,这就是所谓的“整值提升”
所以unsigned char b=~a>>4;
的执行步骤是(32位下):
1. a先提升为int, 0xA5-->0x000000A5
2. 取反0x000000A5-->0xFFFFFF5A
3. 右移,逻辑右移:0xFFFFFF5A-->0x0FFFFFF5 算术右移:0xFFFFFF5A-->0xFFFFFFF5
4. 截断赋值 b = 0xF5
------解决方案--------------------
学习了。。
------解决方案--------------------
顶一下
书上不是说~要比>>的优先级高么,但是为什么下面这段代码是先计算>>?
#include "stdafx.h"
int main()
{
unsigned char a=0xA5;
unsigned char b=~a>>4;
printf("%d",b);
return 0;
}
------解决方案--------------------
小于int类型长度的数据类型的数据在参加运算之前会先提升为int类型,这就是所谓的“整值提升”
所以unsigned char b=~a>>4;
的执行步骤是(32位下):
1. a先提升为int, 0xA5-->0x000000A5
2. 取反0x000000A5-->0xFFFFFF5A
3. 右移,逻辑右移:0xFFFFFF5A-->0x0FFFFFF5 算术右移:0xFFFFFF5A-->0xFFFFFFF5
4. 截断赋值 b = 0xF5
------解决方案--------------------
学习了。。
------解决方案--------------------
顶一下