第一次学习时候就似懂非懂,把主要原因归结于对二进制、十进制和十六进制这些相互转换不熟练,还有就是负数、补码什么的不太通透;再次学习还是似懂非懂,做个笔记吧,顺带把各进制、什么原码、反码补码之类的知识补习一下。

一、不同进制的转换:

1、二进制转换为十进制:二进制从右向左,逐位乘上该位权重再相加;

也就是2^(位数-1)。

例:1001 0101==2^(1-1)+2^(3-1)+2^(5-1)+2^(8-1)==149

2、十进制转换为二进制:用十进制数不停对2取余,从右到左写下余数。

例:149%2=74……1        74%2=37……0        37%2=18……1        18%2=9……0

9%2=4…… 1            4%2=2…… 0           2%2=1…… 0            1%2=0…… 1

那么149转换为二进制就是1001 0101

3、二进制转换为十六进制:因2^4=16。则每1111+1刚好满足十六进制的进位,也就是二进                 制每四位可表示十六进制的最大“个位数”,则二进制从右向左每四位转换为10进制,最左               侧不够四位补零从右向左依次写下来就是十六进制了。十六进制分别用A/B/C/D/E/F表示                 10/11/12/13/14/15。

例:1001 0101 每4位转换为十进制为:9、5,那么十六进制也就是95。

1100 1010 每4位转换为十进制为:12、10,那么十六进制也就是CA。

4、十六进制转换为二进制:将每位十六进制数用二进制表示出来即可。

例:十六进制的CA,C=12、A=10,用二进制把12和10表示出来即可。即:1100 1010

5、十六进制转换为十进制:将十六进制从右向左分别乘上该位权重再相加,即25A4可以转                 换为:

4*(16^0)+10*(16^1)+5*(16^2)+2*(16^3)=9636。

权重:该进制下,某位上的1代表多少个该进制数。

例:25A4,4代表4个16^(1-1),A代表10个16^(2-1),5代表5个16^(3-1),2代表2个

16^(4-1);权重为16^(位数-1)

例:二进制9636,6代表6个10^0,3代表3个10^1,第二个6代表6个10^2,9代表9个10^3;

权重为10^(位数-1)

6、十进制转换为十六进制:将十进制数循环对16取余,将余数从右向左依次写下来即可。

例:9636%16=602…… 4        602%16=37…… 10        37%16=2…… 5                                2%16=0……2

即:2 5 10 4,十六进制表示为25A4。

二、原码、反码、补码:

原码:正数的二进制形式。

例:18       0000 0000 0001 0010

负数的原码,首位(符号位)为1,数据位和正数相同。

例:-18     1000 0000 0001 0010

注意:计算机中负数的二进制形式不是负数的原码,而是负数的补码

反码:正数的反码就是原码;负数的反码除符号位外,其他位取反。

例:18的反码:  0000 0000 0001 0010

-18的反码:1111 1111 1110 1101

补码:正数的补码就是原码,负数的补码是反码+1。

例:18的补码: 0000 0000 0001 0010

-18的补码:1111 1111 1110 1110(负数的二进制表示)

三、按位运算:

1、按位与&:参与按位与的两个数必须是整形,以补码形式出现,两个数的相对位上都是1,结果才是1,其他情况均为0。

例:0000 1010&0000 0101=0

0000 1010&0000 1100=0000 1000=8

应用实例:输出一个数据的二进制形式。

    unsigned int mask=1u<<31;for(mask=1u<<31;mask;mask>>=1){printf("%d",a&mask?1:0);}

2、按位或 |:参与运算的两个数对应位上只要有一个是1,结果就是1;如果是负数,以补码形式出现。

例:0000 1010|0000 0101=0000 1111=15

0000 1010|0000 1100=0000 1110=14

3、按位异或^。数据对应位上,相同情况下为0,不同情况下为1。

例:5^6=0000 0101^0000 0110=0000 0011=3

4、按位取反~:按位取反是对数据的补码取反!然后再取原码!

例:~5,原码:0000 0101 反码:0000 0101 补码0000 0101

补码取反:1111 1010 取反码:1111 1010-1=1111 1001取原码:1000 0110=-6

~-5,原码:1000 0101 反码:1111 1010 补码1111 1011

补码取反:0000 0100 取反码:0000 0100 取原码:0000 0100

(正数补码=反码=原码)

总结:a是正数~a=-(a+1);a是负数~a=-a-1.

5、左移运算<<:二进制位向左移动N位,高位溢出舍弃,右端补0。

例:58<<2=0011 1010<<2=1110 1000=232

6、右移运算>>:二进制位向右移动N位,右端舍弃,算术移位左端补符号位,逻辑移位左端补0。(不理解算术移位和逻辑移位到底是什么意思什么情况)

例:58>>2=0011 1010>>2=0000 1110=14

C语言复习——按位运算以及各种进制转换和原码、反码、补码相关推荐

  1. day017:Java进制转换、原码反码补码、位运算、位移运算符

    一.进制介绍: 1.进制:指进位制,表示某一位置上的数,运算时是逢X进一. 十进制就是逢十进一,二进制就是逢二进一,八进制就是逢八进一. 2.Java中默认的数值都是十进制,如果要输入其他进制,在数值 ...

  2. C语言简介之进制转换,原码、反码、补码,位运算符,函数

    文章目录 进制转换: 十进制转二进制:(转其他进制) 二进制转十进制: 二进制转八进制: 二进制转十六进制: 原码.反码.补码: 位运算符: & ,|, ~, ^, <<, > ...

  3. 由Python位运算到原码反码补码

    采用书籍Python核心编程(第二版),人民邮电出版社,2008年7月第1版.本书以Python2.5为主,但笔记主要以Python3.6为主. 一.Python位运算操作符 Python支持标准位运 ...

  4. 关于 原码 反码 补码 位运算

    二进制 原码:最高位为符号位,0为正  1为负 正数的原码 反码 补码 都是相同的 反码:负数的反码为原码符号位不变 其它对应变化(1变0 0变1) 补码:等于 反码+1 3^-3 =? 运算过程 - ...

  5. C语言基础(二)—— 常量与变量、数据类型、进位制、关键字、原码反码补码、限定符、字符串格式化输入输出

    1. 常量与变量 1.1 关键字 1.2 数据类型 数据类型的作用:编译器预算对象(变量)分配的内存空间大小. 1.3 常量 在程序运行过程中,其值不能被改变的量 常量一般出现在表达式或赋值语句中 整 ...

  6. c语言原码 补码 反码,C语言 原码--反码--补码

    //原码,反码,补码 #include #include //数值的表示方法--原码.反码和补码 //原码:最高位为符号位,其余各位为数值本身的绝对值 //反码: //正数:反码与原码相同 //负数: ...

  7. C语言取字节的第n二进制,学C语言的看过来,最完整进制转换、整数和小数内存存储模型...

    什么是进制 进制也就是进位计数制,是人为定义的带进位的计数方法.对于任何一种进制---N进制,就表示每一位置上的数运算时都是逢N进一位. 数数相信大家都会了,比如0 1 2 3 4 5 6 7 8 9 ...

  8. 【濡白的C语言】数据的存储(大小端模式,原码反码补码,浮点数的存储,浮点型精度缺失的原因)

    前言 很多学习C语言之后就会对各种类型感到很烦,但是数据的类型具有相当的意义.首先是类型决定了大小,即该数据在内存中开辟的空间大小:同时不同的类型还决定了数据存储的方式,相同的数据,存入整形与浮点型方 ...

  9. 原码反码补码之间运算转换

    1. 正数的原码=反码=补码 2. 负数的反码=在其原码的基础上, 符号位不变,其余各个位取反 负数的补码=在反码的基础上+1 负数的补码=在原码的基础上, 符号位不变, 其余各位取反, 最后末位+ ...

最新文章

  1. Windows Mobile常用程序代码(串口、图象、网络、3D、数据库、音频视频等等)
  2. Silverlight 4.0添加鼠标右键菜单和Silverlight全屏模式的进入退出
  3. android contacts 编辑,如何在Android中的.csv文件中逐行编写contactn...
  4. PowerVR 7架构解析
  5. mongodb3.4 安装及用户名密码设置
  6. Windows中使用http-server搭建一个本地服务
  7. hrm系统源码php,开源HRM源码系统下载
  8. matlab画图,均值±标准差
  9. 计算机二级九月试题office,9月计算机二级office题库及答案
  10. java.util.Scanner包的使用
  11. 用地图说话:在商业分析与演示中运用Excel数据地图(全彩)
  12. V-REP笔记:导出自己的机器人模型
  13. row format delimited fields terminated by ','
  14. servlet登录验证并返回错误信息
  15. 逻辑地址与物理地址的转换
  16. register_chrdev_region、alloc_chrdev_region、register_chrdev区别
  17. 用CSS实现一个抽奖转盘(附详细代码+思路)
  18. Python爬取国家数据中心环境数据(全国城市空气质量小时报)并导入csv文件
  19. 盘点国内外十大免费CDN网站加速服务
  20. 天境生物启动A股上市辅导:已实现盈利,臧敬五不再是主要股东?

热门文章

  1. 搭建Jrebel激活服务
  2. 【项目实践】二阶魔方搜索算法
  3. 解决echarts中国地图南海岛屿为空的问题
  4. 【ceph】ceph集群PG(归置组)存在的意义是什么?
  5. TypeError: dump() missing 1 required positional argument: ‘fp‘
  6. itunes备份和恢复速度一样吗_Mac技巧分享:如何从加密的iTunes备份中恢复数据?...
  7. Javaweb-Servlet总结(概述、接口使用、配置、获取请求方式、路径操作、Request对象、Response对象)
  8. 读书笔记(三)工作票数据挖掘
  9. 一个简单的Android木马病毒的分析
  10. Elasticsearch:使用 Docker 来安装 FSCrawler 并摄入 Word 及 PDF 文件