C语言12进制逆序输出,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++
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语言将整数以二进制逆序相关推荐
- c语言16进制直接文本输出,c语言问题求助:将16进制文本转10进制并输出文本
满意答案 #include #include #include #define MAX 50 //**********************读入数据函数*********************** ...
- c语言小数点进制转换,新手求教,关于含小数的二进制转换成十进制
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include void main() { int i=0,n,j,a[20],b[20],k,c=0; double m,x,d; ...
- c语言16进制数给变量,C语言中怎样定义能够保存16进制整数的变量
Objective-C中NSInvocation的使用 OC中调用方法某个对象的消息呦两种方式: #1. performanceSelector: withObject: #2. NSInvocati ...
- c语言输出16进制数转字符,(转)C语言16进制输出字符型变量问题
最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下: char ...
- C语言学习(八)整数(int、short、long)的具体介绍、不同进制表示、输出,sizeof、unsinged的使用
整数(int.short.long)的具体介绍.不同进制表示.输出,sizeof.unsinged的使用 int.short.long的用法及区别.为什么要用short.long? 在现代操作系统中, ...
- 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 提示 数组?堆栈 ...
- 16进制输出C语言字符常量,基础C语言:进制、常量
基础C语言:进制.常量一.进制 1.什么叫进制 进制就是逢几进一,我们说N进制实际就是指逢N进一 (例,计算机只识别二进制:人类习惯使用的是十进制:为了实际需要又建立了八进制和十六进制) 2.不同进制 ...
- c语言逆序输出6A8F,【C语言】将二进制数逆序输出。比如6为000...0110,逆序后为0110....
//将二进制数逆序输出.比如6为000...0110,逆序后为0110...000#include unsigned int reverse_bit(int num){int i;int bit;un ...
- c语言进制转换实验报告,c语言_各种进制转换.docx
c语言_各种进制转换.docx c 语言 各种进制转换 计算机中常用的数的进制主要有二进制.八进制.十六进制. 2 进制,用两个阿拉伯数字0.1: 8 进制,用八个阿拉伯数字0.1.2.3.4.5.6 ...
- 【学习笔记】【C语言】进制
1. 什么是进制 是一种计数的方式,数值的表示形式 2. 二进制 1> 特点:只有0和1,逢2进1 2> 书写格式:0b或者0b开头 3> 使用场合:二进制指令\二进制文件,变量在内 ...
最新文章
- 微型计算机的硬盘电源,自己动手估算电脑的功率 | 微型计算机官方网站 MCPlive.cn...
- js高级程序设计--AJAX JSON
- python笔记:断言assert
- 使用IntelliJ IDEA 14和Maven创建java web项目
- Hive 2.3.2 Installation Guide
- aspnet网站开发实例_新手用户如何根据网站类型或应用场景选择云服务器?
- PHP获取优酷视频FLV地址
- JS前台页面验证文本框非空
- 前端学习(2162):知识回顾
- shiro框架,自定义realm注入service失败解决办法
- C语言:(旧)用字符串自由输入计算的计算器(加减乘除)
- java 1.8有没有jshell_收藏了800道Java后端经典面试题,分享给大家,希望你找到自己理想的Offer呀~...
- MyCat分布式数据库集群架构工作笔记0003---Mycat的作用
- 局部变量AND全局变量
- 购买namesilo域名可以用微信支付了
- 3个关键维度读懂 [社区团购产品设计]
- 小红书数据监测,品牌方必看的笔记投放技巧!
- Android 手势操作GestureDetector
- QActionGroup - setExclusive(互斥)
- python android自动化_2019最新某《安卓自动化测试入门》 Python篇