首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

位运算解决办法

2012-02-24 
位运算 #includestdio.hmain(){unsigneda,b,c,dintnscanf( %o,%d ,&a,&n)ba (16-n)ca nd

位运算

#include   <stdio.h>
main()
{
unsigned   a,   b,c,d;
int   n;
scanf( "%o,%d ",&a,&n);
b=a < <(16-n);
c=a> > n;
d=c|b;
printf( "%o\n%o\n ",a,d);
}
是个循环移动的问题  
我想问的是   我在vc上编译   结果和预想的结果不同
157653,3
157653
75765
我便宜的不是这个结果
是不是这个程序按   unsigned   是2字节   vc   是4字节的问题吗?
如果是的话是不是应该   把16换成32呢?

[解决办法]
int 在32位系统中确实是32位,4字节的

如果你想知道某个类型有多少字节,那么请用如下语句:
printf( "%d\n ", sizeof(unsigned) );

这样便能知道它是多少个字节宽的了
[解决办法]
为了让你的程序具有可移植性,你该把16换成
sizeof(unsigned) * 8
[解决办法]
unsigned
unsigned int 吧
int在32位机器上是32位的
[解决办法]
其实很简单~把
d = c | b; 这一行改成如下就可以了,目的就是屏蔽掉不需要的部分

d = c | b & 0xFFFF; // 只保留16位

如果要完成32位的循环位移,那么只要把16改成32就可以了.

热点排行