转载:https://mp.weixin.qq.com/s?__biz=Mzk0NDYzNTI1Ng==&mid=2247483733&idx=2&sn=728c93b046d5967755dd35f464cdcd8b&chksm=c320ed42f45764547c033a1a7cd04e72b7d054e5dc9346627ac1b0707def1f58c20a1b191567#rd

C 按位显示二进制

在C语言的printf中不能直接显示一个数字的二进制。

但我们可以通过位运算获取数字每一位的值然后显示。

获取数字最小位的值

我们以25为例子,其二进制为1101,那么我们要获取其最底位的值就是1。

通过位与运算1101 & 0001 = 0001可以得到结果。

同理,我们若想获得其第二位的值也是同理,只需要把第二位变成最小位即可,(1101 >> 1) & 0001 = 0110 & 0001 = 0000。

借助此,我们可以写出如下函数:

void printbit(unsigned int num){
for (unsigned int i=1;i != 0;i <<= 1){
unsigned int bit = num & 1;
printf("%u", bit);
num >>= 1;
}
printf("\n");
}

但是,实际效果却不太理想。他把显示的数值倒了过来。

当然,处理的方法有很多,我的方法是再做一个函数用于把数值倒过来。

把数值倒过来

我们只需要把num = 00000000000000000000000000011001变成num = reverse_bits(num) = 10011000000000000000000000000000即可。

reverse_bits的代码如下:

unsigned int reverse_bits(unsigned int num){
unsigned int answer = 0;
for (unsigned int i=1;i != 0;i <<= 1){
answer <<= 1;
unsigned int bit = num & 1;
answer |= bit;
num >>= 1;
}
return answer;
}

同理,变量bit是指num的最低位的值,我们要讲这个值写到answer中。

然后,让answer向左移位一位,效果如下:

10011最底位是0001

写入到answer:

answer = 0001 & 0000 = 0001

移位:

answer = 0010

再重复刚刚的步骤:

bit = 0

answer = 0010

answer = 0100

再重复刚刚的步骤:

bit = 1

answer = 0101

answer = 1010

再重复刚刚的步骤:

bit = 1

answer = 1011

最终便可以转换完成。


注意:

我们使用了unsigned int i=1;i != 0;i <<= 1来计算整数二进制的总位数。

如,系统计算整数的位数是5位,那么就会有如下效果:

i = 00001,然后经过4次移位,得到i = 10000。当第五次时i = 00000 = 0,循环结束。


注意:

25也就是1101,倒过来的结果并不是1011。

因为系统内存储25的二进制是:00000000000000000000000000011001,

所以倒过来后是:10011000000000000000000000000000。

当然,不同的编译器结果可能是不同的。

C 按位显示二进制的更多相关文章

  1. 关于让simulink中display组件显示二进制的方法

    关于让simulink中display组件显示二进制的方法 1.首先需要配置gateway out模块,勾选propagate data type to output 2.配置display模块 fo ...

  2. Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] A. Raising Bacteria【位运算/二进制拆分/细胞繁殖,每天倍增】

    A. Raising Bacteria time limit per test 1 second memory limit per test 256 megabytes input standard ...

  3. 如何显示二进制流的图片(利用img控件)

    之前在http://www.cnblogs.com/JsonZhangAA/p/5568575.html博文中是利用的image控件来显示的二进制流图片,我现在想的是能 通过普通的<img id ...

  4. 接收二进制流(ArrayBuffer) ,并且显示二进制流图片

    1.调用接口,返回二进制流数据 var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { && xhr ...

  5. luogu P2114 [NOI2014]起床困难综合症 位运算 二进制

    建议去uoj那里去测,数据比较强 位运算的题目,就得一位一位的分开考虑 然后枚举初始值的最高位是0 是1 的最终攻击 (二进制内)最高位是1肯定比次位是1次次位是1次次次位是1···的大吧,显然 然后 ...

  6. UVa 818Cutting Chains (暴力dfs+位运算+二进制法)

    题意:有 n 个圆环,其中有一些已经扣在一起了,现在要打开尽量少的环,使所有的环可以组成一条链. 析:刚开始看的时候,确实是不会啊....现在有点思路,但是还是差一点,方法也不够好,最后还是参考了网上 ...

  7. plsql导出查询结果,导出csv文件。但是类似身份证等超出15位的数据后三位显示问题,和科学计数法的格式问题

    问题描述:     plsql导出查询结果时,如果使用导出查询结果,使用excelfile会特别慢.     所以我们一般使用csv文件,然后在excel中新建空白文档,在数据菜单中导入数据,但是导出 ...

  8. Codeforces Round #721 (Div. 2)A. And Then There Were K(位运算,二进制) B1. Palindrome Game (easy version)(博弈论)

    半个月没看cf 手生了很多(手动大哭) Problem - A - Codeforces 题意 给定数字n, 求出最大数字k, 使得  n & (n−1) & (n−2) & ...

  9. 音响音箱/恒温壶/电量显示/电子数字时钟等LED数码管显示驱动IC-VK1640B 8段12位/12段8位显示

    市面上最常用的数码管为七段/八段显示,八段数码管比七段数码管多一个发光二极管单元(比七段数码管多一个点),又按能显示多少个"8"可分为1位.2位.4位等等.数码管又分为共阳极驱动/ ...

  10. [PHP] 算法-两个n位的二进制整数相加问题PHP实现

    两个n位二进制数分别存储在两个n元数组A和B中,这两个整数的和存在一个n+1元的数组C中答:此问题主要是考察相加进位的问题,元素1+1 =0 并且往前进一位ADD-BINARY(A,B) C=new ...

随机推荐

  1. Solution -「CF 1039D」You Are Given a Tree

    Description Link. 有一棵 \(n\) 个节点的树,其中一个简单路径的集合被称为 \(k\) 合法当且仅当:树的每个节点至多属于其中一条路径,且每条路径恰好包含 \(k\) 个点. 对 ...

  2. Solution Set -「ARC 111」

    「ARC 111A」Simple Math 2 Link. \(\lfloor \frac{10^N - kM^2}{M} \rfloor \equiv \lfloor \frac{10^N}{M} ...

  3. pyinstall打包相对路径问题

    pyinstall打包相对路径问题 ​ pyinstaller 打包py文件成exe文件,在没有python的机器上运行,执行打包后的程序,经常会出现程序使用的图标无法显示,程序使用的关联文件无法关联 ...

  4. 如何vue3中使用全局变量,与Vue2的区别

    对比: 在vue2.x中我们挂载全局变量或方法是通过是使用Vue.prototype.$xxxx=xxx的形式来挂载,然后通过this.$xxx来获取挂载到全局的变量或者方法 但是 在vue3.x中显 ...

  5. 如何提高redux开发效率?当然是redux-tookit啦!

    前言 使用react-redux的朋友都经历过这种痛苦吧? 定义一个store仓库,首先创建各种文件,比如reducer.action.store...,然后 将redux和react连接使用.整个流 ...

  6. 分布式事务:XA和Seata的XA模式

    上一篇内容<从2PC和容错共识算法讨论zookeeper中的Create请求>介绍了保证分布式事务提交的两阶段提交协议,而XA是针对两阶段提交提出的接口实现标准,本文则对XA进行介绍. 1 ...

  7. 归并排序 nO(lgn) 审核中

    大家好,我是蓝胖子,我一直相信编程是一门实践性的技术,其中算法也不例外,初学者可能往往对它可望而不可及,觉得很难,学了又忘,忘其实是由于没有真正搞懂算法的应用场景,所以我准备出一个系列,囊括我们在日常 ...

  8. 深入理解Python虚拟机:super超级魔法的背后原理

    深入理解Python虚拟机:super超级魔法的背后原理 在本篇文章中,我们将深入探讨Python中的super类的使用和内部工作原理.super类作为Python虚拟机中强大的功能之一,super ...

  9. Treap树学习笔记

    等我写完. 普通fhq treap: enum { Maxn = 1000005 }; struct FHQTreap { int lson[Maxn], rson[Maxn], data[Maxn] ...

  10. 本地化部署自建类ChatGPT服务远程访问

    Text generation web UI可为类ChatGPT的大型语言模型提供能够快速上手的网页界面,不仅可以提高使用效率,还可满足私有化部署,或对模型进行自定义.目前,该Web UI已经支持了许 ...