一,概念

加法

乘法

减法

除法

二,二进制,十进制,十六进制转化

二进制转十进制

十进制转二进制

二进制转十六进制

十六进制转二进制

三,原码,反码,补码

正数

负数

四,操作符中的运用

<< 左移操作符

>> 右移操作符

五,位操作符

&按位与

|按位或

^按位异或

六,笔试题

1,求两个数二进制中不同位的个数

2,打印整数二进制的奇数位和偶数位

3,统计二进制中1的个数


一,概念

二进制(binary)是在数学和数字电路中指以2为基数的记数系统,是以2为基数代表系统的二进位制。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 。

数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。每个数字称为一个比特(Bit,Binary digit的缩写)。

加法

二进制加法有四种情况: 0+0=0,0+1=1,1+0=1,1+1=10(0 进位为1)

乘法

二进制乘法有四种情况: 0×0=0,1×0=0,0×1=0,1×1=1

减法

二进制减法有四种情况:0-0=0,1-0=1,1-1=0,0-1=1

除法

二进制除法有两种情况(除数只能为1):0÷1=0,1÷1=1

二,二进制,十进制,十六进制转化

二进制转十进制

方法:“按权展开求和”,该方法的具体步骤是先将二进制的数写成加权系数展开式,而后根据十进制的加法规则进行求和

 规律:个位上的数字的次数是0,十位上的数字的次数是1,......,依次递增,而十分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。

十进制转二进制

一个十进制数转换为二进制数要分整数部分和小数部分分别转换,最后再组合到一起。

整数部分采用 "除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

例:125

小数部分要使用“乘 2 取整法”。即用十进制的小数乘以 2 并取走结果的整数(必是 0 或 1),然后再用剩下的小数重复刚才的步骤,直到剩余的小数为 0 时停止,最后将每次得到的整数部分按先后顺序从左到右排列即得到所对应二进制小数。例如,将十进制小数 0.8125 转换成二进制小数过程如下。

当然最快速的方法是记得2所有次方对应的值

0 1 2 4 8 16 32 64 128

0.5 0.25 0.125 0.625

通过比较相应位次的大小累加得到目标值,学过网络技术的理解最深刻。

二进制转十六进制

                二进制                    十六进制
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F

二进制转16进制,取四位 合一位,从小数点开始,向左向右取,到高位,不够位数 补0,16进制的表示法,用字母H后缀表示,比如BH就表示16进制数11;也可以用0X前缀表示,比如0X23就是16进制的23.

十六进制转二进制

例:CF6.53

C:1100   F: 1111  6:0110  5:0101  3:0011

所以对应二进制:1100 1111 0110.0101 0011

三,原码,反码,补码

正数:

原码、反码、补码相同;

以123为例:

原码:01111011

反码:01111011

补码:01111011

负数

负数的原码:为取绝对值的数转二进制,然后符号位加一;

负数的反码:对该数的原码除符号位外,各位取反;

负数的补码:对该数的反码加1。负数的补码即为负数的二进制数。

以-123为例:

原码:11111011,其中最高位1为符号位。

反码:10000100

补码:10000101

四,操作符中的运用

位移操作符

<< 左移操作符

#include<stdio.h>
int main()
{int num = 10;int b = 10 << 1;printf("%d", b);return 0;
}

左移操作符 移位规则

左边抛弃、右边补0

int main()
{int a = 5;//4byte = 32bitint b = a << 1;//int b = a + 1;printf("%d\n", b);printf("%d\n", a);//00000000000000000000000000000101//00000000000000000000000000000101//00000000000000000000000000000101
}

>> 右移操作符 

#include<stdio.h>
int main()
{int a = -1;int b = -1 >> 1;printf("%d", b);return 0;
}

右移操作符 移位规则:

1. 逻辑移位 左边用0填充,右边丢弃
2. 算术移位 左边用原该值的符号位填充,右边丢弃

int main()
{int a = -1;int b = -1 >> 1;printf("%d", b);return 0;// 11111111111111111111// 算数右移 11111111111111111111// 逻辑右移 01111111111111111111
}
int main()
{int c = -1;int d = c << 1;printf("%d\n", d);//打印的是原码的值//10000000000000000000000000000001 - 原码//11111111111111111111111111111110 - 反码//11111111111111111111111111111111 - 补码return 0;
}

对于移位运算符,不要移动负数位,这个是标准未定义的。 例如:

 int num = 10;num>>-1;//error

五,位操作符

&
|
^
//按位与
//按位或
//按位异或

&按位与

int main()
{int a = 3;int b = -2;int c = a & b;printf("%d\n", c);//%d -  说明我们要打印c的值,以有符号的形式return 0;}
//10000000000000000000000000000010 -2的原码
//11111111111111111111111111111101 -2的反码
//11111111111111111111111111111110 -2的补码//00000000000000000000000000000011  3的补码//00000000000000000000000000000011
//11111111111111111111111111111110
//00000000000000000000000000000010结果为2

 |按位或

int main()
{int a = 3;int b = -2;int c = a | b;printf("%d\n", c);return 0;
}
//10000000000000000000000000000010 -2的原码
//11111111111111111111111111111101 -2的反码
//11111111111111111111111111111110 -2的补码//00000000000000000000000000000011  3的补码//11111111111111111111111111111110
//00000000000000000000000000000011
//11111111111111111111111111111111结果为-1

 ^按位异或

int main()
{int a = 3;int b = -2;int c = a ^ b;printf("%d\n", c);//%d -  说明我们要打印c的值,以有符号的形式return 0;}
//10000000000000000000000000000010 -2的原码
//11111111111111111111111111111101 -2的反码
//11111111111111111111111111111110 -2的补码//00000000000000000000000000000011  3的补码//异或 - 相同为0,相异为1
//11111111111111111111111111111110
//00000000000000000000000000000011
//11111111111111111111111111111101结果为-3

 六,笔试题

1,求两个数二进制中不同位的个数

1. 先将m和n进行按位异或,此时m和n相同的二进制比特位清零,不同的二进制比特位为1
2. 统计异或完成后结果的二进制比特位中有多少个1即可
#include <stdio.h>
int calc_diff_bit(int m, int n)
{int tmp = m^n;int count = 0;while(tmp){tmp = tmp&(tmp-1);count++;}return count;
}int main()
{int m,n;while(scanf("%d %d", &m, &n) == 2){printf("%d\n", calc_diff_bit(m, n));}return 0;
}

2,打印整数二进制的奇数位和偶数位

1. 提取所有的奇数位,如果该位是1,输出1,是0则输出0
2. 以同样的方式提取偶数位置检测num中某一位是0还是1的方式:1. 将num向右移动i位2. 将移完位之后的结果与1按位与,如果:结果是0,则第i个比特位是0结果是非0,则第i个比特位是1
void Printbit(int num)
{for(int i=31; i>=1; i-=2){printf("%d ", (num>>i)&1);}printf("\n");for(int i=30; i>=0; i-=2){printf("%d ", (num>>i)&1);}printf("\n");
}

3,统计二进制中1的个数


方法一:int count_one_bit(int n)
{int count = 0;while(n){if(n%2==1)count++;n = n/2;}return count;
}
方法二:int count_one_bit(unsigned int n)
{int count = 0;int i = 0;for(i=0; i<32; i++){if(((n>>i)&1) == 1)count++;}return count;
}方法三:
int count_one_bit(int n)
{int count = 0;while(n){n = n&(n-1);count++;}return count;
}
												

关于C语言二进制相关的内容+笔试习题,建议收藏相关推荐

  1. k-fold cross validation 相关的帖子、论文 建议收藏哦 ~

    k-fold cross validation 详细讲解 建议收藏哦 ~   写在前面:本以为自己用的数据分割方法是k-fold交叉验证,结果仔细地查找了许多资料发现大错特错了,所以本篇就不把所有查到 ...

  2. 【C语言详解】——文件操作(建议收藏)

    前言:本期我们就进入C语言的最后一部分--文件操作,说起文件,广大学子可以说苦其久已,但实际上文件这部分要掌握的内容并不多,熟知其原理即可.因为在以后的实际应用中几乎不会使用到C语言的文件,一般都是使 ...

  3. 2021软件测试面试题汇总【备战金九银十】内容较长建议收藏

    一.面试基础题 简述测试流程: 1.阅读相关技术文档(如产品PRD.UI设计.产品流程图等). 2.参加需求评审会议. 3.根据最终确定的需求文档编写测试计划. 4.编写测试用例(等价类划分法.边界值 ...

  4. r语言中mpg数据_零基础生信入门第一课——R语言数据清洗,超详细讲解,建议收藏!...

    小伙伴们大家好!今天我要用一篇推文精要概括数据清洗中的最基本最关键的步骤,对于零基础的学员一定会有很大收获!数据清洗是完成一篇生信文章最基本但也是最终要的准备工作,如果不会数据清洗,就要错过很多优质数 ...

  5. 05 C语言框架讲解(嵌入式C语言要学哪些内容,学习路线)

    C语言框架讲解(C语言要学哪些内容,学习路线) b站配套视频地址 CSDN有图阅读地址 Gitee文档源码地址 作者 将狼才鲸 日期 2021-07-17 注:gitee暂不支持markdown me ...

  6. c语言计算机二级考试内容,2017计算机二级考试内容C语言

    2017计算机二级考试内容C语言 C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.那么计算机二级C语言的考试内容是什么呢,我 ...

  7. C语言---二进制和文本文件的备份

    C语言-二进制和文本文件的备份 学习参考: https://www.cnblogs.com/jackytang/p/9011127.html 代码: #include <stdio.h> ...

  8. 自学c语言中相关知识,设计出医院住院管理系统.要求如下所述:,C语言课程设计题Z目.doc...

    C程序课程设计 题目及任务 设计题目.任务 从以下三个题目中任选一个 题目一:汽车售票系统 任务:自学C语言中相关知识,设计出汽车售票系统.要求如下所述: 每天"武汉火车站→天河机场&quo ...

  9. gradle相关配置内容解析

    gradle 项目的构建工具,基于groovy语言.主要用于管理依赖包. as中一般将gradle下载在C:\Documents and Settings<用户名>.gradle\wrap ...

最新文章

  1. PCL深度图像(2)
  2. 这所211大学,实力强悍,适合“踩线生”报考!
  3. Redis中列表list数据类型(增加(在左侧、右侧或指定元素前后插入数据)、获取(获取表内指定范围的元素)、更新(获取指定索引位置的元素值)、删除(删除指定元素、count))
  4. Java并发——ReentrantLock
  5. 移动端触屏click点击事件延迟问题,以及tap的解决方案
  6. 2018 年度 GtiHub 开源项目 TOP 25:数据科学 机器学习
  7. 用C语言Linux下打印带颜色的字符串
  8. 语音识别 | GMM-HMM、DNN-HMM等主流算法及前沿技术
  9. [ An Ac a Day ^_^ ] hdu 5835 Danganronpa 令人发指
  10. NET下,你采用的是哪种方式进行数据操作?
  11. List接口的常用方法以及ArrayList/LinkedList源码分析
  12. 世界首富贝索斯退休?辞任CEO,转任董事会主席
  13. python嵌套html开发gui_python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例...
  14. ES8新特性_async函数---JavaScript_ECMAScript_ES6-ES11新特性工作笔记048
  15. 安卓手机上微信无法打开Https网址的完美解决方案
  16. 由浅入深,汇编语言详解与二进制漏洞初阶
  17. 改善程序与设计的55个具体做法 day5
  18. 功能强大的pdf控件,用户无需安装任何软件即可使用
  19. UNIX环境高级编程-第六章-系统数据文件和信息
  20. 数据的存储------计算机中常见数据类型的存储方式(C语言解析)

热门文章

  1. 托米的位运算 牛客练习赛23 C
  2. 信息安全领域(研究对象方向术语概念)
  3. SQL与T-SQL的区别
  4. 简述彭罗斯近年一些公开讲堂内容的物理意义
  5. 华为彭红华:700MHz!两大创新不可少
  6. OC中block的理解
  7. windows程序托盘图标以及消息提示--基本知识(NOTIFYICONDATA)
  8. Climbing Stairs -- LeetCode
  9. 公司给了IP地址如何使用(详细版)
  10. PCB线宽与过流计算公式