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

移位运算有关问题

2013-11-29 
移位运算问题各位好,对于移位运算弱弱的问个问题。比如一个整形int i 16982;它的二进制:100001001010110in

移位运算问题
   各位好,对于移位运算弱弱的问个问题。
   比如一个整形
   int i= 16982;
   它的二进制:100001001010110
   int k = i >> 9;
   这个时候得到的就是:100001 = 32;
   我要问的就是我如何得到被移位掉的数呢,这里就是001010110被移位掉了,我想得到这个数不知道怎么操作,望各位指点一二。 移位操作
[解决办法]
100001 = 33!!
这和小学学过的求余数道理是一样的,被除数=除数*商+余数。此处为:
16982=33*(2^9)+ X。
这个问题,还可以将16982左移(16-9)位后,再右移回来就得到了你要的数了,高位的 100001 在运算中被截掉了。
[解决办法]
新手也来学习啊
[解决办法]


int i = 16982;
/* 这样j=001010110 */
int j = i & 0x1ff;
/* 这样k=100001 */
int k = i >> 9;


引用:
   各位好,对于移位运算弱弱的问个问题。
   比如一个整形
   int i= 16982;
   它的二进制:100001001010110
   int k = i >> 9;
   这个时候得到的就是:100001 = 32;
   我要问的就是我如何得到被移位掉的数呢,这里就是001010110被移位掉了,我想得到这个数不知道怎么操作,望各位指点一二。

[解决办法]
直接低9位与1相与,其他位与0相与,就像@turingo写的 : int j = i * 0x1ff
[解决办法]
int i= 16982;
int k = i >> 9;
int j = i & ((1<<9)-1);

热点排行