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 ...
随机推荐
- Linux-Stream内存带宽及MLC内存延迟性能测试方法
1.Stream内存带宽测试 Stream是业界主流的内存带宽测试程序,测试行为相对简单可控.该程序对CPU的计算能力要求很小,对CPU内存带宽压力很大.随着处理器核心数量的增大,而内存带宽并没有 ...
- 解密网络通信的关键技术(上):DNS、ARP、DHCP和NAT,你了解多少?
IP 协议相关技术 在与 IP 协议相关的技术中,有一些重要且常见的技术,其中包括 DNS 域名解析.ARP 协议.DHCP 动态获取 IP 地址以及NAT 网络地址转换.这些技术在网络通信中起着关键 ...
- docker入门加实战—Docker镜像和Dockerfile语法
docker入门加实战-Docker镜像和Dockerfile语法 镜像 镜像就是包含了应用程序.程序运行的系统函数库.运行配置等文件的文件包.构建镜像的过程其实就是把上述文件打包的过程. 镜像结构 ...
- Newstar CTF 2023
WEEK1 PWN 1.ezshellcode 直接sendline(shellcode)即可 exp: from pwn import * p = remote("node4.buuoj. ...
- osx12.6设置全屏
首先安装VMWARE TOOLS就是unlocker208下的tool的darwin.iso 然后进入终端命令,这里要说一下,好多资料说按COMMAND键,反正我是没有进去,直接在vmware菜单里选 ...
- 【不限框架】超好用的3d开源图片预览插件推荐
今天给大家推荐一款超好用的图片预览插件-image-preview 简单说明 image-preview是一款主要面向移动端web应用,同时兼容pc,基于原生js,不限框架,react,vue,ang ...
- 数据结构与算法 | 深搜(DFS)与广搜(BFS)
深搜(DFS)与广搜(BFS) 在查找二叉树某个节点时,如果把二叉树所有节点理理解为解空间,待找到那个节点理解为满足特定条件的解,对此解答可以抽象描述为: 在解空间中搜索满足特定条件的解,这其实就是搜 ...
- Linux-管道、环境变量、常用命令
目录 管道 概念 要点 与文件重定向的区别 环境变量 概念 查看 常用命令 查看系统状况 权限 文件查找 用户相关 工具 管道 概念 管道的作用类似于文件重定向,可以将前一个命令的stout做为下一个 ...
- PTA1030完美数列二分法解决超时
#include"bits/stdc++.h" using namespace std; const int N=100010; long long ans,n,p; long l ...
- QPixmap、QIcon和QImage
QPixmap依赖于硬件,QImage不依赖于硬件.QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O.图片访问和像素修改而设计的. 当图片小的情况下,直接用QPi ...