C语言整数按照二进制逆序,输出逆序后的整数值
问题来源,今天早上和一舍友吃早餐的时候谈到的一个问题,将一个整数按照二进制逆序,然后输出逆序后的数值。
我们知道数值在内存中都是以二进制的形式存放的,假如我们是32位机,每8位为一个字节,int型在32位机上是占4个字节,即32位。
如 2 = 0000 0000 0000 0000 0000 0000 00000 0010(32位)
逆 ^2 = 0100 0000 0000 0000 0000 0000 00000 0000 (这里用^表示逆转)
那么这个操作要如何执行呢?首先补充几点知识:
1)a = a << 1 ,表示将a左移一位,如:0010->0100 (一般后面是补0的)
2)b = b >> 1 ,表示将b右移一位,如:0100->0010 (一般前面是补0的)
3)b & 1 ,这个表示按位与操作,比如:2 & 1,其实执行的是如下操作:
0000 0000 0000 0000 0000 0000 00000 0010 = 2
0000 0000 0000 0000 0000 0000 00000 0001 = 1
0000 0000 0000 0000 0000 0000 00000 0000 = 2 & 1 = 0
这个操作,将前31位全部置为0,只保留最后一位不变,效果就是取出最后一位的值。
4)a &= ~1 ,相比这个不需要解释了吧?同3)一样,但是~表示将0的位置,置为1;1的位置,置为0。
5)a |= 1 ,这个表示按位或操作(a = a | 1),比如:2 | 1,其实是执行如下操作:
0000 0000 0000 0000 0000 0000 00000 0010 = 2
0000 0000 0000 0000 0000 0000 00000 0001 = 1
0000 0000 0000 0000 0000 0000 00000 0011 = 2 | 1 = 3
好了,下面看一下如下代码.....
当前环境:win7_32bit,vs2010,c++
#include <stdio.h> int main(void)
{
int i = ,a = ; //32位 0000 0000 0000 0000 0000 0000 0000 0010 = 2
int b = a; //另存一份 while (i--)
{
a = a << ;
a &= ~; //~1 = 1111 1111 1111 1111 1111 1111 1111 1110 确保第31位上为0
if (b & ) // 1 = 0000 0000 0000 0000 0000 0000 0000 0001
{
a |= ; //确保第31位上为1
}
b = b >> ;
} printf("%d\n",a); return ;
}
思想:总体思想就是:
1)首先使a,b的值相等;
2)然后,每次从b尾部取出一位(从第32位一直取到第0位,用i循环控制);注意:b = b >> 1,b一直在右移,以确保每次取出其最后一位。
3)最后,将其追加在a的末尾。注意:a = a << 1,a一直在左移,以确保循环32次之后,末尾第一个追加的数字,抵达第一位。
-------------------------------------------------------------------------------------------------------
原文地址:http://www.cnblogs.com/nchar/p/3915668.html
C语言整数按照二进制逆序,输出逆序后的整数值的更多相关文章
- 网易云课堂_C语言程序设计进阶_第5周:链表_1逆序输出的数列
1 逆序输出的数列(10分) 题目内容: 你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束.然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1. 输 ...
- c 整数的逆序输出 输入3,2就算 2+22+222的结果
#include<stdio.h> #include<math.h> //整数逆序输出 void nixu() { int num,i; i = ; scanf("% ...
- Java逆序输出整数
题目要求:编写方法reverseDigit,将一个整数作为参数,并反向返回该数字.例如reverseDigit(123)的值是321.同时编写程序测试此方法. 说明:10的倍数的逆序,均以实际结果为准 ...
- 利用C语言判别输入数的位数并正逆序输出
利用C语言判别用户输入数的位数并正逆序输出 #include <stdio.h> void main() { int i, scanfNum, printfNum, temp ...
- C语言:将字符串中的字符逆序输出,但不改变字符串中的内容。-在main函数中将多次调用fun函数,每调用一次,输出链表尾部结点中的数据,并释放该结点,使链表缩短。
//将字符串中的字符逆序输出,但不改变字符串中的内容. #include <stdio.h> /************found************/ void fun (char ...
- C++关于数字逆序输出的两种思路,及字符串逆序输出
C++关于数字逆序输出的两种思路,及字符串逆序输出 作者:GREATCOFFEE 发布时间:NOVEMBER 15, 2012 分类:编程的艺术 最近在跟女神一起学C++(其实我是不怀好意),然后女神 ...
- 编写一个类,其中包含一个排序的方法Sort(),当传入的是一串整数,就按照从小到大的顺序输出,如果传入的是一个字符串,就将字符串反序输出。
namespace test2 { class Program { /// <summary> /// 编写一个类,其中包含一个排序的方法Sort(),当传入的是一串整数,就按照从小到大的 ...
- nyoj 266-字符串逆序输出 (isdigit(), geline(cin, my_string))
266-字符串逆序输出 内存限制:64MB 时间限制:3000ms 特判: No 通过数:15 提交数:18 难度:0 题目描述: 给定一行字符,逆序输出此行(空格.数字不输出) 输入描述: 第一行是 ...
- 【云栖社区001-数据结构】如何实现一个高效的单向链表逆序输出(Java版)
如题 动手之前,发现自己很擅长用C语言来写链表. 不过,既然自己做的是Java开发,那么还是用Java实现这个算法吧:毕竟,以后的若干年里都差不多要跟Java打交道了. 于是,先将Java版的链表自学 ...
随机推荐
- R学习日记——分解时间序列(非季节性数据)
分解时间序列,就是将一个时间序列拆分成不同的构成元件.一般序列(非季节性序列)包含一个趋势部分和一个不规则部分(也就是随机部分),而如果是一个季节性序列,除以上两个外,还有季节性部分. 在此,我们 ...
- M - Escape - HDU 3605 - (缩点+最大流SAP)
题目大意:2012世界末日来了,科学家发现了一些星球可以转移人口,不过有的人可以在一些星球上生存有的人不行,而且每个星球都有一定的承载量,现在想知道是否所有的人都可以安全转移呢? 输入:首先输入一个N ...
- linux补包
1.挂载文件export LANG=Cmkdir -p /media/cdrommount /dev/cdrom /media/cdrommount /dev/hdc /media/cdrommoun ...
- jQuery Ajax全解析
jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 我们先来看一些简单的方法,这些方法都是对jQuery.ajax( ...
- 使用Fastjson提示No serializer found for class
在调用Json串生成方法时,提示: No serializer found for class com.jeremxy.domain.EpgDetail and no propertiesdiscov ...
- Android学习四、Android中的Adapter
一.Adapter的介绍 An Adapter object acts as a bridge between an AdapterView and the underlying data for t ...
- TinyXml快速入门(一)
对于xml文件,目前的工作只是集中在配置文件和作为简单的信息文件来用,因此我不太喜欢使用msxml这种重量级的xml解析器,特别是使用msxml解析xml涉及到复杂的com类型转换,更是令人感觉繁琐. ...
- 排序算法源码(JAVA)
public class Test { public static void main(String[] args){ Sort sort = new Sort(); sort.sortTest( ...
- 自制Javascript分页插件,支持AJAX加载和URL带参跳转两种初始化方式,可用于同一页面的多个分页和不同页面的调用
闲话部分 最近闲着实在无聊,就做了点小东西练练手,由于原来一直在用AspNetPager进行分页,而且也进行了深度的定制与原有系统整合的也不错,不过毕竟是用别人的,想着看自己能试着做出来不能,后台的分 ...
- 遍历页面上所有TextBox,并赋值为String.Empty
//不含母板页 foreach (System.Web.UI.Control txtobj in this.Page.Controls) { if (txtobj.GetType().Na ...