理解位运算转化十进制到二进制

小小的预备知识

1、>> 右移
     如果一个二进制数右移1位,则最右边的那一位,也就是最后一位就会被丢掉,但是同时倒数第二位就会变成最后一位。以此类推,右移2位、3位,可以理解为二进制数的倒数第3位,倒数第4位被移到了末位。
     例如,我们在对十进制5进行“>>”时,即“5 >> 3”时,我们可把5看为“0101”,即位运算为“0101 >> 2”,结果为“0001”,即在前端补0的同时,倒数第3位的1被移到末位去了。

2、& 与运算
     如果我们有一个二进制数,我们要得到它的末位数,该怎么办呢。其实只要&1就行了。
     0&1 = 0,1&1=1,1&0=0,0&0=0可见一个二进制位和&1,都会保留自己原来数值,&0则都会被化为0哦
     5&1=0101 & 0001,答案为1;4&1 = 0100 & 1,答案为0。      拓展一下,如果想要得到最后两位二进制位,那应该 &3 。
     6&3=0110&0011,答案为2,即“10”;

代码模板

#include <iostream>
#include <cstdio>
using namespace std;

/*
该代码输出了从0到15的二进制数 
*/ 
int main(void)
{
	int n = 0;
	for(int j = 0;j <= 15;j ++)
	{
		n = j;                             //利用for循环的范围,也相当于决定了转为的二进制数有几位,这里是4位
		for(int i = 3;i >= 0;i --)         //注意是3到0,这个在纸上画画很显然        
			cout << (n >> i & 1);         //第i + 1位的那一位被移动到末尾,然后被保留了下来。       
		cout << endl;
	}
		
} 

注意: 进行位运算时,最后的结果是十进制数!!,如6 & 3的结果其实是2, >>结果也一样是十进制整数。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我了解您的问题。实现十进制二进制可以使用顺序栈来模拟,具体步骤如下: 1.将十进制数入栈。 2.用栈顶元素除以二,得到商和余数,余数入栈。 3.重复第2步,直到商为0。 4.弹出栈中所有元素,即为该十进制数的二进制表示。 需要注意的是,在弹出栈中元素时,要注意顺序,以得到正确的二进制表示。 希望我的回答对您有所帮助。 ### 回答2: 十进制转化二进制的过程可以通过顺序栈来实现。首先,我们需要创建一个空栈,作为二进制数的容器。 将十进制数从右往左依次除以2,将余数依次压入栈中,直到除完。 接下来,我们开始弹出栈中的元素,即从栈中取出元素,直到栈为空。将弹出的元素依次排列起来,即为十进制数的二进制表示。 举个例子,我们将十进制数13转化二进制数。 首先,将13除以2,得到的余数为1,将1压入栈中。然后将13除以2,得到的商为6,再次除以2,得到余数为0,将0压入栈中。最后,将6除以2,得到的商为3,再次除以2,得到的余数为1,将1压入栈中。 现在我们开始弹出栈中的元素,依次为1、0、1。将它们按照弹出顺序排列起来,得到的二进制数表示为101。 因此,十进制数13转化二进制数的结果是101。 以上就是使用顺序栈实现十进制转化二进制的过程。通过这种方法,我们可以将任意十进制转化为对应的二进制数。 ### 回答3: 十进制转化二进制可以通过顺序栈来实现。首先,我们需要明确十进制转换为二进制的原理。 在十进制转换为二进制时,我们需要不断地除以2,并将余数存入栈中。具体操作如下: 1. 初始化一个空的顺序栈。 2. 将十进制数除以2,并取得其余数。 3. 将余数入栈。 4. 将十进制数除以2取整,然后继续执行第2步骤,直到十进制数变为0. 5. 从栈顶开始依次弹出栈中的元素,即可得到二进制数。 下面是一个具体的例子来说明: 以十进制数12转化二进制数为例。 1. 初始化一个空的顺序栈。 2. 12除以2,得到6余数0。将余数0入栈。 3. 6除以2,得到3余数0。将余数0入栈。 4. 3除以2,得到1余数1。将余数1入栈。 5. 1除以2,得到0余数1。将余数1入栈。 6. 十进制数变为0,停止除法运算。 7. 从栈顶开始弹出栈中的元素,得到的顺序就是12的二进制表示。 第一个弹出的元素是1,第二个是1,第三个是0,第四个是0。 因此,12的二进制表示为1100。 通过以上步骤,我们可以将任意的十进制转化二进制数。这个过程中顺序栈的作用是将余数按照反序存储,然后逐个弹出,最终得到正确的二进制表示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值