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", &copyNumber, &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("输入错误,请重新输入.");
    }

C语言的那些题(二)——进制之循环移位

时间: 2024-08-12 06:15:06

C语言的那些题(二)——进制之循环移位的相关文章

[编程题-华为]进制转换

[编程题] 进制转换 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串.(多组同时输入 ) 输入描述: 输入一个十六进制的数值字符串. 输出描述: 输出该数值的十进制字符串. 输入例子: 0xA 输出例子: 10 #include<iostream> #include<string> using namespace std; int toDigit(char c) { if(c>='a' && c<='f') return c-'a'

HDU 4432 Sum of divisors (水题,进制转换)

题意:给定 n,m,把 n 的所有因数转 m 进制,再把各都平方,求和. 析:按它的要求做就好,注意的是,是因数,不可能有重复的...比如4的因数只有一个2,还有就是输出10进制以上的,要用AB.. 但我用的是ab..又没读好题....活该WA了好几次. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #includ

C语言实现字符串中(10进制和16进制)转成十进制数

如何将字符串中的10进制数和16进制数提取出来,看以下代码: #include <stdio.h> typedef char TUINT8 ; typedef int TUINT32; TUINT32 Read_DecNumber(const TUINT8* str); TUINT32 Read_HexNumber(const TUINT8* str); int main(void) { int ret = Read_DecNumber("1000"); int d = R

c语言-大数乘法(16进制)

由来 由于工作中用到,自己在网上找了一些大数乘法源码,都没有符合我要求的.所以自己实现了一个. 分析过程 仿照我们小学学过的10进制乘法算式,来实现的大数乘法. 先举一个例子:234 * 567 这是我们最普通的乘法算式,对于程序实现起来还有点难,因此我们再继续计算分析: (注:图中的小数字,不是次方,只是进位的数) 这个计算过程跟上图的区别就是加法跟乘法分开来计算,我在做乘法部分的时候,只是单纯的计算乘法,没有做加法,把进位的数标记出来,最后把在同一列的数字统统加起来,该进位的进位,最后起算出

2015/12/26 十六、 八 、二 进制转十进制

十六进制41BD 转换十进制4*16^3+1*16^2+11*16^1+13*16^0=16384+256+176+13=16829 十六进制A10C.8 转换十进制10*16^3+1*16^2+0*16^1+12*16^0+8*16^-1=40960+0+16+12+0.5=41228.5 八进制146.1 转换成十进制1*8^2+4*8^1+6*8^0+1*8^-1=64+32+6+0.125=102.125 八进制5312.2 转换成十进制5*8^3+3*8^2+1*8^1+2*8^0+2

02进制_原码反码补码

###02.03_Java语言基础(不同进制数据的表现形式)(掌握)* A:二进制的数据表现形式 * 由0,1组成.以0b(b可以大写也可以小写)开头(JDK1.7版本可以表示二进制了)* B:八进制的数据表现形式 * 由0,1,-7组成.以0开头* C:十进制的数据表现形式 * 由0,1,-9组成.整数默认是十进制的 * D:十六进制的数据表现形式 * 由0,1,-9,a,b,c,d,e,f(大小写均可).以0x开头 * E:案例演示 * 输出不同进制表现100的数据. * 0b100 * 0

【搬砖】安卓入门(2)- Java开发编程基础--进制转换和运算符

02.01_Java语言基础(常量的概述和使用)(掌握) A:什么是常量 在程序执行的过程中其值不可以发生改变 B:Java中常量的分类 字面值常量 自定义常量(面向对象部分讲) C:字面值常量的分类 字符串常量        用双引号括起来的内容 整数常量        所有整数 小数常量        所有小数 字符常量        用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号 布尔常量        较为特殊,只有true和false 空常量        null(数组

类型 变量 进制

一.类型 数据类型是程序的基础,决定了数据的意义,也决定了我们能在数据上所执行的操作. 从http://www.cnblogs.com/Shuqing-cxw/p/9189411.html 2文件的本质可以知道,数据类型可以理解为固定大小内存的别名: 不同的数据类型,用于应对各种不同的需要:最简单的例如加减法使用整数型,而除法可能需要浮点类型更符合实际: 在存储空间中,使用数据类型来向整个存储空间申请一个相应大小的内存块以供使用: 1.1 基本类型 内置类型包括了算术类型和空类型: 算术类型分为

NOIP2000 进制转换

题一   进制转换              (18分)  问题描述      我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*102+2*101+3*100这样的形式. 与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置的(值-1)为指数,以2为底数的幂之和的形式.一般说来,任何一个正整数R或一个负整数-R都可以被选来作为一个数制系统的基数.如果是以R或-R为基