C++ 移位运算与进制转换 浅析

移位运算包括“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。

逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充。

算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。

c++中,整数分有符号数和无符号数两种。对于这两种数做左移、右移运算。稍有差别:

1、假设是无符号数,无论是左移还是右移都是“逻辑移位” 。例,对无符号数 179 做左移、右移操作的结果,都是补0操作;

2、假设是有符号数。左移运算,那么做的是“逻辑移位”,与无符号数的左移同。假设是做右移运算,那么做的是“算术移位”。

最后本文给出十进制数转换为二进制的递归工作机制图例。例如以下

10进制数转换成二进制数,这是一个连续除2的过程:

把要转换的数,除以2,得到商和余数。

将商继续除以2,直到商为0。最后将全部余数倒序排列,得到数就是转换结果。

十进制转十六进制源代码

#include<iostream>
#include<string>
using namespace std;
string str_16="";

string switch_10_16(int ch)
{
    switch(ch)
    {
        case 0:return"0";break;
        case 1:return"1";break;
        case 2:return"2";break;
        case 3:return"3";break;
        case 4:return"4";break;
        case 5:return"5";break;
        case 6:return"6";break;
        case 7:return"7";break;
        case 8:return"8";break;
        case 9:return"9";break;
        case 10:return"A";break;
        case 11:return"B";break;
        case 12:return"C";break;
        case 13:return"D";break;
        case 14:return"E";break;
        case 15:return"F";break;
    }
}
long int change(long int num)
{
    if(num<16)
    {
        str_16+=switch_10_16(num);
        return 0;
    }
    else
    {
        change(num/16);
        str_16+=switch_10_16(num%16);
    }
}

int main()
{
    long str_10;
    cin>>str_10;
    change(str_10);
    cout<<str_16<<endl;
    return 0;
} 
时间: 2024-12-12 08:19:30

C++ 移位运算与进制转换 浅析的相关文章

03 php 数据类型:整数,进制转换,浮点,字符,布尔,数组,空类型,类型转换,算术运算,比较运算

03 数据类型:整数,进制转换,浮点,字符,布尔,数组,空类型,类型转换, 算术运算,比较运算,逻辑运算,短路现象, 三目运算符,字符型运算: 数据类型 整体划分 标量类型: int, float, string, bool 复合类型: array,     object 特殊类型: null,     resouce 整数类型int, integer 3种整数表示法 十进制写法:123: $n1 = 123; 八进制写法: 0123 $n2 = 0123; 十六进制写法: 0x123 $n3

数学运算高级工具bc:小数精度;进制转换;计算平方及平方根

bc是一个用于数学运算的高级工具,包含了大量选项,可以借助它执行浮点数运算并应用一些高级函数: [[email protected] ~]# echo 3*2.12 | bc 6.36 [[email protected] ~]# n=54 [[email protected] ~]# m=`echo "$n*1.5" | bc` [[email protected] ~]# echo $m 81.0 [[email protected] ~]# 其他二代参数可以放在要执行的具体操作前

超长整数的基础运算 算法实现之进制转换篇

十进制转二进制 由于单个"位"采用的是216-1作为理论最大值,因此在本次大整数的表示过程中每个类似"十进制"位可采用16位的二进制来表示,符号位单独表示. "十"进制转换成二进制,实际上是经过中间状态(即大整数的逻辑存储表示)转化.在转换过程中大整数的每个"位"无耦合,不存在依赖关系,因此实现方式较为单一,即采用十进制数进行不断除2得余数的方式组成二进制的结果.需要特别注意的是二进制字符串不足16位的需要在高位用"

JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都是很痛苦的事情,但是程序之路这么长,你必须精通的不能再精通一门语言才行(有点说大了哈),但是最起码你要如鱼得水吧,我准备的资料有: JAVA编程思想 深入浅出JAVA 黑马,传智,慕课,极客学院等-的视频 Google搜索 我们既然是重新学一遍,那我们尽量就是用记事本去敲代码好了,这里我用notep

Python 进制转换、位运算

一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: '0o27' In [137]: hex(23) Out[137]: '0x17' 也可以直接反向获取十进制 In [146]: 0b10111 Out[146]: 23 In [147]: 0o27 Out[147]: 23 In [148]: 0x17 Out[148]: 23 也可以用int函数

Go 获取键盘输入,进制转换

#### Go 获取键盘输入,进制转换 最近爱上<<珂矣的心灵独语>> 连续听一下礼拜也不觉得厌: 喜欢她的宁静与安然,喜欢她的坦荡与欢喜,喜欢她的禅意与智慧; ***撑着一苇江湖,耕烟处, 入时无***##### 获取键盘输入 func Scanln(a ...interface{})(n int,err error) 在换行时停止扫描,也就是说通过换行来获得输入结束信号 func Scanf(format string, a ...interface{}) (n int,err

原理之一,进制转换

原理之一,进制转换 日常生活中采用个数字都是十进制,而计算机采用的是运算更简单.易实现且可靠,为逻辑设计提供了有力途经的二进制,除此之外还有八进制和十六进制作为二进制的缩写. 进制:逢N进一,N是每种进位计数制表示一位数所需要的符号数目为基数. 二进制:逢二进一,借一当二,包含的数字(0.1) 八进制:逢八进一,借八当一,包含(0.1.2.3.4.5.6.7) 十六进制:逢十六当一,以一当十六,包含(0.1.2.3.4.5.6.7.8.9.10(A).11(B).12(C).13(D).14(E

大数进制转换问题

在数据结构课关于栈的这一章中,我们都学过用"模2取余法"来将一个10进制数转换为一个二进制数,进而可以推广到"模n取余法",经其转换为n进制(n任意指定). 确实,这是一个很基础的题目,可你是否想过如果这个10进制数是一个大数(其位数可能上千位,此时用一般数据类型肯定是会溢出的),那么这个问题又如何来求解呢? 当然,也许你会说很简单嘛,自己写一个大数类(当然至少要写一个大数除法才行),或者你用的是Java这种现代化语言,就更轻松了,直接用BigInteger这样的大

计算机基础知识(一)——进制转换

由于去年是十月一之后才来的提高班,所以错过了米老师讲的一些基础知识,现在跟着十二期一起听课,把欠下的补回来! 一.计算机为什么使用二进制,而不是用十进制,十六进制? 大家都知道计算机内部都是用二进制来处理数据的,那么大家知道为什么使用二进制,而不是十进制,十六进制吗?其实原因很简单,就是简单,因为二进制只有0和1,它再怎么组合也是0和1,运算很简单嘛! 二.进制转换 在转换之前,我们先要知道二进制的"权重".1,2,4, 8, 16, 32, 64, 128,转换的时候都是以权重为基础