问题来源,今天早上和一舍友吃早餐的时候谈到的一个问题,将一个整数按照二进制逆序,然后输出逆序后的数值。

我们知道数值在内存中都是以二进制的形式存放的,假如我们是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++

1 #include

2

3 int main(void)4 {5 int i = 32,a = 2; //32位 0000 0000 0000 0000 0000 0000 0000 0010 = 2

6 int b = a; //另存一份

7

8 while (i--)9 {10 a = a << 1;11 a &= ~1; //~1 = 1111 1111 1111 1111 1111 1111 1111 1110 确保第31位上为0

12 if (b & 1) //1 = 0000 0000 0000 0000 0000 0000 0000 0001

13 {14 a |= 1; //确保第31位上为1

15 }16 b = b >> 1;17 }18

19 printf("%d\n",a);20

21 return 0;22 }

思想:总体思想就是:

1)首先使a,b的值相等;

2)然后,每次从b尾部取出一位(从第32位一直取到第0位,用i循环控制);注意:b = b >> 1,b一直在右移,以确保每次取出其最后一位。

3)最后,将其追加在a的末尾。注意:a = a << 1,a一直在左移,以确保循环32次之后,末尾第一个追加的数字,抵达第一位。

-------------------------------------------------------------------------------------------------------

C语言12进制逆序输出,C语言将整数以二进制逆序相关推荐

  1. c语言16进制直接文本输出,c语言问题求助:将16进制文本转10进制并输出文本

    满意答案 #include #include #include #define MAX 50 //**********************读入数据函数*********************** ...

  2. c语言小数点进制转换,新手求教,关于含小数的二进制转换成十进制

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include void main() { int i=0,n,j,a[20],b[20],k,c=0; double m,x,d; ...

  3. c语言16进制数给变量,C语言中怎样定义能够保存16进制整数的变量

    Objective-C中NSInvocation的使用 OC中调用方法某个对象的消息呦两种方式: #1. performanceSelector: withObject: #2. NSInvocati ...

  4. c语言输出16进制数转字符,(转)C语言16进制输出字符型变量问题

    最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下: char  ...

  5. C语言学习(八)整数(int、short、long)的具体介绍、不同进制表示、输出,sizeof、unsinged的使用

    整数(int.short.long)的具体介绍.不同进制表示.输出,sizeof.unsinged的使用 int.short.long的用法及区别.为什么要用short.long? 在现代操作系统中, ...

  6. ACMNO.21 C语言-逆序输出 输入10个数字,然后逆序输出。 输入 十个整数 输出 逆序输出,空格分开 样例输入 1 2 3 4 5 6 7 8 9 0

    题目描述 输入10个数字,然后逆序输出. 输入 十个整数 输出 逆序输出,空格分开 样例输入 1 2 3 4 5 6 7 8 9 0 样例输出 0 9 8 7 6 5 4 3 2 1 提示 数组?堆栈 ...

  7. 16进制输出C语言字符常量,基础C语言:进制、常量

    基础C语言:进制.常量一.进制 1.什么叫进制 进制就是逢几进一,我们说N进制实际就是指逢N进一 (例,计算机只识别二进制:人类习惯使用的是十进制:为了实际需要又建立了八进制和十六进制) 2.不同进制 ...

  8. c语言逆序输出6A8F,【C语言】将二进制数逆序输出。比如6为000...0110,逆序后为0110....

    //将二进制数逆序输出.比如6为000...0110,逆序后为0110...000#include unsigned int reverse_bit(int num){int i;int bit;un ...

  9. c语言进制转换实验报告,c语言_各种进制转换.docx

    c语言_各种进制转换.docx c 语言 各种进制转换 计算机中常用的数的进制主要有二进制.八进制.十六进制. 2 进制,用两个阿拉伯数字0.1: 8 进制,用八个阿拉伯数字0.1.2.3.4.5.6 ...

  10. 【学习笔记】【C语言】进制

    1. 什么是进制 是一种计数的方式,数值的表示形式 2. 二进制 1> 特点:只有0和1,逢2进1 2> 书写格式:0b或者0b开头 3> 使用场合:二进制指令\二进制文件,变量在内 ...

最新文章

  1. 微型计算机的硬盘电源,自己动手估算电脑的功率 | 微型计算机官方网站 MCPlive.cn...
  2. js高级程序设计--AJAX JSON
  3. python笔记:断言assert
  4. 使用IntelliJ IDEA 14和Maven创建java web项目
  5. Hive 2.3.2 Installation Guide
  6. aspnet网站开发实例_新手用户如何根据网站类型或应用场景选择云服务器?
  7. PHP获取优酷视频FLV地址
  8. JS前台页面验证文本框非空
  9. 前端学习(2162):知识回顾
  10. shiro框架,自定义realm注入service失败解决办法
  11. C语言:(旧)用字符串自由输入计算的计算器(加减乘除)
  12. java 1.8有没有jshell_收藏了800道Java后端经典面试题,分享给大家,希望你找到自己理想的Offer呀~...
  13. MyCat分布式数据库集群架构工作笔记0003---Mycat的作用
  14. 局部变量AND全局变量
  15. 购买namesilo域名可以用微信支付了
  16. 3个关键维度读懂 [社区团购产品设计]
  17. 小红书数据监测,品牌方必看的笔记投放技巧!
  18. Android 手势操作GestureDetector
  19. QActionGroup - setExclusive(互斥)
  20. python android自动化_2019最新某《安卓自动化测试入门》 Python篇

热门文章

  1. M-02-12.[紫猫]Url网络操作扩展
  2. 手机号码格式和邮箱格式校正
  3. c++入门 简单语句 空语句 作用域和块 复合语句
  4. openwrt开机自启动脚本编写
  5. 计算机终端mac是什么,苹果Mac OS终端是什么,Mac OS终端的作用是什么?
  6. matlab图像光照效果模拟
  7. 安徽 gis epsg
  8. ICMP协议详解和作用
  9. (附源码)springboot基于Web的儿童教育管理系统的开发毕业设计281442
  10. 春节红包战:他们到底在争什么?