练习2-8 编写一个函数rightrot(x,n),该函数返回将x循环右移n(二进制)位后所得到的值
来源:互联网 发布:网络语吊打是什么意思? 编辑:程序博客网 时间:2024/04/30 11:12
测试:
#include <stdio.h>unsigned rightrot(unsigned x,int n);int wordlength(void);main(){ unsigned x; int n; x=111; n=3; rightrot(x,n);}unsigned rightrot(unsigned x,int n){ int wordlength(void); int wl; wl=wordlength(); printf("wl:%d",wl); x=(x&~(~0<<n%wl))<<(wl-n%wl);/* 7左移29位 */ return x;}int wordlength(void){ int i; unsigned v=(unsigned)~0; for(i=1;(v=v>>1)>0;i++) ; return i;}
输出为什么为-2^29:
-536870912
0000 0000 0000 0000 0000 0000 0000 0111 << 29补码:1110 0000 0000 0000 0000 0000 0000 0000反码:1101 1111 1111 1111 1111 1111 1111 1111原码:1010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0111 << 30补码:1100 0000 0000 0000 0000 0000 0000 0000反码:1011 1111 1111 1111 1111 1111 1111 1111原码:1100 0000 0000 0000 0000 0000 0000 0000
定义unsigned返回却变成了signed类型。
#include <stdio.h>void rightrot(unsigned x,int n);int wordlength(void);main(){ unsigned x; int n; x=111; n=3; rightrot(x,n);}void rightrot(unsigned x,int n){ int wordlength(void); int wl; wl=wordlength(); printf("wl:%d",wl); x=(x&~(~0<<n%wl))<<(wl-n%wl);/*7 左移29位 */ printf(" x:%u",x);}int wordlength(void){ int i; unsigned v=(unsigned)~0; for(i=1;(v=v>>1)>0;i++) ; return i;}
输出
wl:32 x:3758096384
#include <stdio.h>unsigned rightrot(unsigned x,int n);int wordlength(void);main(){ unsigned x; int n; x=111; n=3; rightrot(x,n);}unsigned rightrot(unsigned x,int n){ int wordlength(void); int wl; wl=wordlength(); printf("wl:%d",wl); x=((x&~(~0<<n))<<(wl-n%wl))|(x>>n); return x;}int wordlength(void){ int i; unsigned v=(unsigned)~0; for(i=1;(v=v>>1)>0;i++) ; return i;}
n超过wl时,移动n%wl位。
0 0
- 练习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(二进制)位后所得到的值。
- 2.8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端再移入)n(二进制)位后所得到的值。
- 编写一个函数rightbot(x,n),该函数返回将X循环右移n(二进制)为后所得的值
- 关于编写一个函数invert(x,p,n),返回x循环右移n位后得到的值,the c programming language 第二章练习2-8
- 练习 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-7 编写一个函数invert(x,p,n),该函数将x中第p位开始的n个9(二进制)位求反
- 练习2-6 编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,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 执行下列操作后的结 果值:将x中从第p位开始的n个(二进制)位求反(即,1 变成0,0 变成1),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位的值
- Android项目中引用本地aar文件的方法
- iOS 第三方框架 - ReactiveCocoa学习1
- 第十五周项目 补充阅读程序(4)
- memcached 常见面试题
- Java中泛型的使用
- 练习2-8 编写一个函数rightrot(x,n),该函数返回将x循环右移n(二进制)位后所得到的值
- linux环境下svn的搭建管理
- git开发必备命令,慢慢看,以后多敲敲代码
- 测试TCP和UDP端口的方法
- android String对象\n 显示换行符
- 一个老鸟发的公司内部整理的 Android 学习路线图
- Storm的体系结构介绍以及Storm入门案例
- Android app性能优化解决卡慢顿之布局优化
- 微信开发中访问微信接口限制次数的问题