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

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

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

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

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

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

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


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

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


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;   } 

原文链接: https://www.cnblogs.com/wzjhoutai/p/7106957.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/256251

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午9:53
下一篇 2023年2月14日 上午9:54

相关推荐