代码改变世界

unsigned int 和int 在移位运算中的区别

2010-12-20 23:48  Rollen Holt  阅读(3051)  评论(0编辑  收藏  举报

用代码说话。

1 下面程序的输出结果是多少?
2 #include<iostream>
3  using namespace std;
4 int main()
5 {
6 unsigned char a=0xA5;
7 //取反优先级高于移位
8 unsigned char b=~a>>4;
9 /*现行pc机为32位,即该存储单元亦为32位,对于位操作,在计算时尽管为char,先提升为int类型,再各位取反。C语言并不存在8位位运算,操作数在做位运算之前至少被提升int型(32位);~a为1111 1111 1111 1111 1111 1111 0101 1010;~a>>4为0000 1111 1111 1111 1111 1111 1111 0101,取后面8位赋值给b*/
10 printf("b=%d\n",b);//输出结果为245
11 return 0;
12 }
13 -----------------------------------------------------------------------------------------------------------------------------------
14 int main()
15 {
16 unsigned char a=1;
17 cout <<static_cast<unsigned int>(~a)<< endl;//输出结果为4294967294
18 cout <<static_cast<int>(~a)<< endl;//输出结果为-2
19 /*int与unsigned int表示范围不同,unsigned int表示0~4294967295;类型提升时一般先转换为unsigned int再转为int,int与unsigned int相互转换各位取反即可*/
20 cout<<static_cast<int>(~a<<8)<< endl;//输出结果为-512
21 unsigned char b=~a;
22 cout<<static_cast<int>(b<<8)<< endl;//输出结果为65024
23 return 0;
24 }