首页 > 代码库 > C语言的那些题(二)——进制之循环移位
C语言的那些题(二)——进制之循环移位
今天,和大家分享一道关于进制问题中的循环移位,大家应该知道,系统语言中提供的按位左移 《 和按位右移 》都是非循环的。那什么叫循环移位呢?所谓循环移位是指在移位时不丢失移位前原范围的位,而是将它们作为另一端的补入位。例如循环右移n位,指各位右移n位,原来的低n位变成高n位,指各位右移n位,原来的低n位变成高n位。
接下来,我们看一下题目要求:输入一个字节内的数(0~255)和移动位数。输出移位结果(要求循环移位)
因为是一个字节内的数,有8位二进制数组成,所以移动的位数不会大于8。然后就要考虑一下是向左循环移位还是向右循环移位,这是两种情况,不能遗漏。
实现代码如下:
unsigned char number = 0; unsigned char left = 0; // 存储向左移位结果 unsigned char right = 0; // 存储向右移位结果 int n = 0; // 表示移动位数 int copyNumber = 0; printf("输入一个字节内的数(0~255)和移动位数n:(n的绝对值不大于8,n>0代表向右移位,n<0代表向左):"); scanf("%d%d", ©Number, &n); // 直接输入unsigned char类型的有警告, number = copyNumber; // 所以定义了一个copyNumber if (n >= 0 && n <= 8) { // n的绝对值不大于8,n>0代表向右移位 right = number >> n; left = number << (8 - n); printf("向右循环移位结果:%d", right | left); } else if (n >= -8 && n < 0) { // n的绝对值不大于8,n<0代表向左 n = -n; left = number << n; right = number >> (8 - n); printf("向左循环移位结果:%d", right | left); } else { printf("输入错误,请重新输入."); }
本文出自 “一滴阳光” 博客,请务必保留此出处http://zhangzhanzg.blog.51cto.com/9168075/1532579
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。