C 按位显示二进制
转载: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 按位显示二进制的更多相关文章
- 关于让simulink中display组件显示二进制的方法
关于让simulink中display组件显示二进制的方法 1.首先需要配置gateway out模块,勾选propagate data type to output 2.配置display模块 fo ...
- 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 ...
- 如何显示二进制流的图片(利用img控件)
之前在http://www.cnblogs.com/JsonZhangAA/p/5568575.html博文中是利用的image控件来显示的二进制流图片,我现在想的是能 通过普通的<img id ...
- 接收二进制流(ArrayBuffer) ,并且显示二进制流图片
1.调用接口,返回二进制流数据 var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { && xhr ...
- luogu P2114 [NOI2014]起床困难综合症 位运算 二进制
建议去uoj那里去测,数据比较强 位运算的题目,就得一位一位的分开考虑 然后枚举初始值的最高位是0 是1 的最终攻击 (二进制内)最高位是1肯定比次位是1次次位是1次次次位是1···的大吧,显然 然后 ...
- UVa 818Cutting Chains (暴力dfs+位运算+二进制法)
题意:有 n 个圆环,其中有一些已经扣在一起了,现在要打开尽量少的环,使所有的环可以组成一条链. 析:刚开始看的时候,确实是不会啊....现在有点思路,但是还是差一点,方法也不够好,最后还是参考了网上 ...
- plsql导出查询结果,导出csv文件。但是类似身份证等超出15位的数据后三位显示问题,和科学计数法的格式问题
问题描述: plsql导出查询结果时,如果使用导出查询结果,使用excelfile会特别慢. 所以我们一般使用csv文件,然后在excel中新建空白文档,在数据菜单中导入数据,但是导出 ...
- 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) & ...
- 音响音箱/恒温壶/电量显示/电子数字时钟等LED数码管显示驱动IC-VK1640B 8段12位/12段8位显示
市面上最常用的数码管为七段/八段显示,八段数码管比七段数码管多一个发光二极管单元(比七段数码管多一个点),又按能显示多少个"8"可分为1位.2位.4位等等.数码管又分为共阳极驱动/ ...
- [PHP] 算法-两个n位的二进制整数相加问题PHP实现
两个n位二进制数分别存储在两个n元数组A和B中,这两个整数的和存在一个n+1元的数组C中答:此问题主要是考察相加进位的问题,元素1+1 =0 并且往前进一位ADD-BINARY(A,B) C=new ...
随机推荐
- day01 java 数据类型
数据类型 1. 数值型:整数类型 byte short int long 浮点类型 double float 基本数据类型:2.字符型:char 3.布尔型:boolean 1. ...
- jmeter不用工具获取随机值的几种方法
第一种:直接获取 "vcContent": "${__time(yyyyMMddHHmmss)}${__RandomString(8,QWERTYUIOPASDFGHJK ...
- 使用 QuickTime Player 将手机投屏到旧版 Macbook pro
由于旧版的 MacBook Pro 不支持 AirPlay,我们可以通过Mac系统自带的应用程序[QuickTime Player]来进行投屏操作. 以下是具体的步骤: 首先,使用USB数据线将你的 ...
- ESP32-MicroPython 开发环境
Linux/Mac 下使用MicroPython开发ESP32 刷入固件 使用 esptool.py 将 MicroPython 刷入 ESP32 开发板涉及几个步骤. 1. 安装 esptool 如 ...
- 轻松掌握组件启动之MongoDB:快速入门、Linux安装和Docker配置指南
引言 我们将继续深入研究组件启动专题.在之前的文章中,我们已经详细介绍了Redis的各种配置使用方法,为读者提供了全面的指导.然而,今天我们将转向另一个备受关注的数据库--MongoDB.MongoD ...
- 【Unity3D】水面特效
1 前言 水波特效 中通过屏幕后处理实现了环形水波效果,本文通过 Shader Graph 实现了模拟水面特效,包含以下特效细节.Shader Graph 基础知识详见→Shader Graph简 ...
- python包引用方式总结
本文为博主原创,转载请注明出处: 在Python中,有多种引用包的方式.以下是常见的方式: 1. import语句 import语句是最常见和推荐的引用包的方式.它允许你引入整个包或包中的特定模块/子 ...
- meet
以后就放弃csdn了,就来这里记录自己的成长,就当成一个树洞吧,开心与难过,学习与生活,进步与成长,留下时间的痕迹!冲!冲!冲!
- React生命周期函数(迭代合并:react 16.3)
本文分两部分,上面的是react16.3,下部分是老版本 react 16.3生命周期更新解析 ------ 老react版本生命周期 1.组件生命周期的执行次数 只执行一次: constructor ...
- Redis项目搭建
Redis项目搭建 Redis下载 搭建redis首先需要下载Redis,可是Redis官方并没有Windows安装,好在网上从不缺大牛,Github上可以找到Redis的Windows版 下载地址: ...