位运算
#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就可以了.