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 }
==============================================================================
本博客已经废弃,不在维护。新博客地址:http://wenchao.ren
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
实我是一个程序员
==============================================================================