2.8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端再移入)n(二进制)位后所得到的值。
来源:互联网 发布:json decode 出现null 编辑:程序博客网 时间:2024/05/15 14:41
Answer Book
第一种解法 是 每次将x最右端右移1位 与 该位移到最左端 进行或运算 ,这样进行n次循环即可。
源程序:
/*rightrot: rotate x to the right by n position*/
unsigned rightrot(unsigned x, int n)
{
int wordlength(void);
int rbit; /* rightmost bit*/
while(n-- > 0)
{
rbit = (x & 1) << (wordlength() - 1);
x = x >> 1;
x = x | rbit;
}
}
/* 计算出运行程序的计算机所使用的字长 */
int wordlength(void)
{
int i;
unsigned v = (unsigned) ~0;
for(i = 1; (v = v >> 1) > 0; ++i)
;
return i;
}
2.第二种解法
/*
如果对x进行循环右移的总位数(n)与一个无符号整数的二进制
位数(即这台计算机的字长)相等,完成这些次循环右移后的结
果将与x完全一样,因此我们就不必对x进行循环右移了。
如果n小于这台计算机的字长,那我们就必须把x循环右移n位。
如果n大于这台计算机的字长,那么,我们只需先(利用取模运
算符)求出n对这台计算机的字长的余数,再把x循环右移这个余
数所代表的次数。基于上述分析,我们将得到一个不需要使用循
环语句的解决方案。
~0 << n,把一个全1的屏蔽码左移n位,在它的最右端制造出n位0
~(~0 << n),把屏蔽码最右端的n位设置为1,其余位则设置为0
当我们用这个屏蔽码和x进行AND运算时,x最右端的n位将被赋值
给变量rbits。然后,将rbits中的1左移到它的最左端,把x右移
n位,再对右移后的x和rbits进行OR运算,就完成了对无符号整
数x循环右移n位
*/
unsigned rightrot(unsigned x,
int
n)
{
unsigned rbits;
if
((n=n%wordlength()) > 0)
{
rbits = x & ~(~0<<n); n rightmost bi
rbits = rbits << (wordlength()-n);
x = x >> n;
x = x | rbits;
}
return
x;
}
- 2.8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端再移入)n(二进制)位后所得到的值。
- 2.8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端再移入)n(二进制)位后所得到的值。
- 练习2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端再移入)n(二进制)位后所得到的值。
- 练习 2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端移入)n(二进制)位后所得到的值。
- 练习 2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端移入)n(二进制)位后所得到的值。
- 练习 2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端移入)n(二进制)位后所得到的值。
- /将x循环右移n位(从最右端移出的位从最左端移入)
- 练习2-8 编写一个函数rightrot(x,n),该函数返回将x循环右移n(二进制)位后所得到的值
- 编写一个函数rightbot(x,n),该函数返回将X循环右移n(二进制)为后所得的值
- 练习 2-6 编写一个函数setbits(x, p, n, y),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
- 练习 2-6 编写一个函数 setbits(x, p, n, y),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
- 2.6 编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
- 练习2-6 编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
- 练习2-6 编写一个函数setbits(x,p,n,y),将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值
- 练习 2-7 编写一个函数invert(x, p, n),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位求反(即,1变成0,0变成1),x的其余各位保持不变。
- 练习2-7 编写一个函数invert(x,p,n),该函数返回对x执行下列操作后的结果:将x从第p位开始的n个(二进制)位求反(即1变成0,0变成1),x的其余各位保持不变。
- 练习 2-7 编写一个函数 invert(x, p, n),该函数返回对x 执行下列操作后的结 果值:将x中从第p位开始的n个(二进制)位求反(即,1 变成0,0 变成1),x的其余各位保持不变。
- 练习2-7 编写一个函数invert(x,p,n),该函数将x中第p位开始的n个9(二进制)位求反
- 看似简单的scanf
- Android Sqlite中row id的应用
- 程序员技术练级攻略
- 红球白球黑球
- MyEclipse快捷键大全
- 2.8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端再移入)n(二进制)位后所得到的值。
- 穷举法解决组合问题
- 面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发
- vs2010 光标错误
- 关于xpath中的.// 和 //
- ReportingService2008 报表设置中设置报表在滚动时表头保持不变并且在翻页时表头重复显示在每页中
- 百度缺的不是狼性,而是鲁滨逊
- 未来的搜索引擎是什么样的?
- 四人年龄数列