ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言二进制数据-学习笔记(十九)

2021-07-25 23:31:37  阅读:227  来源: 互联网

标签:反码 符号 二进制 补码 C语言 十九 十进制 原码


一、二进制数据

1、二进制数、位、字节与字

十进制数:
10,12等。
二进制数:
1011等。
一个位只能表示0,或者1两种状态,简称bit,一个位是一个bit。
一个字节为8个二进制,称为8位,简称BYTE,8个比特是一个字节。
一个字为2个字节,简称WORD。
两个字为双字,简称DWORD。

2、进制转换

八进制整常数须以0开头,即以0作为八进制数的前缀。数码取值0~7。通常是无符号数。如0666;
十六进制整常数的前缀为0X或0x。其数码取值为0-9,A-F或a-f。
(1)二进制转为八进制:->三位二进制数可表示一位八进制数
方法:将二进制整数部分自右向左每三位分为一组,不足三位左边0补足;将二进制小数部分自左向右每三位分为一组,不足三位右边0补足。
(2)二进制转为十六进制:->四位二进制数可表示一位十六进制数
方法:将二进制整数部分自右向左每四位分为一组,不足四位左边0补足;将二进制小数部分自左向右每四位分为一组,不足四位右边0补足。
(3)二进制转为十进制:按权展开 ->如:
在这里插入图片描述
(4)八进制转为二进制:写出每位八进制数码对应的二进制数,依次排好即可。
(5)十六进制转为二进制:写出每位十六进制数码对应的二进制数,依次排好即可。
(6)十进制转为二进制
①整数部分:
基数除法,整数部分除以2,余数作为二进制整数部分最低位,商再除以2,余数作为二进制整数部分次低位,以此规律,直至商为0,所得余数为二进制整数部分最高位。
②小数部分:
基数乘法,小数部分乘以2,结果中整数部分作为二进制小数部分最高位,结果中小数部分再乘以2,所得结果整数部分作为二进制小数部分次高位,以此规律,直至小数部分为0或达到所需精度。
十进制转为其他进制只需将2改为相应进制,按以上基数乘除法计算即可。
进制转换表:
在这里插入图片描述
十进制转化8进制,用十进制数作为被除数,8作为除数,取商数和余数,直到商数为0的时候,将余数倒过来就是转化后的结果。
十进制转化16进制,用十进制数作为被除数,16作为除数,取商数和余数,直到商数为0的时候,将余数倒过来就是转化后的结果。

3、原码,补码,反码

⑴正数:原码和补码和反码相同。 ->符号位为0
⑵负数:原码=符号位+数值本身 ->符号位为1
反码=符号位+原码数值取反 ->符号位为1
补码=(符号位+原码数值取反)+1 ->符号位为1
⑶负数补码转为原码:最高位不动,其余各位取反加1

如: -1  原码:1000 0001 补码:(1111 1110)+1=1111 1111
   -2  原码:1000 0010 补码:(1111 1101)+1=1111 1110

例:
原码:
将最高位做为符号位(0代表正,1代表负),其余各位代表数值本身的绝对值

+7的原码是00000111
-7的原码是10000111
+0的原码是00000000
-0的原码是10000000

反码:
一个数如果值为正,那么反码和原码相同
一个数如果为负,那么符号位为1,其他各位与原码相反

+7的反码00000111
-7的反码11111000
-0的反码11111111

补码:
原码和反码都不利于计算机的运算,如:原码表示的7和-7相加,还需要判断符号位。
正数:原码,反码补码都相同
负数:最高位为1,其余各位原码取反,最后对整个数 + 1

-7的补码:
10000111(原码)
11111000(反码)
11111001  (补码)
+0的补码为00000000
-0的补码也是00000000

补码符号位不动,其他位求反,最后整个数 + 1,得到原码
用补码进行运算,减法可以通过加法实现

7-6=1
7的补码和-6的补码相加:00000111 + 11111010 = 100000001
进位舍弃后,剩下的00000001就是1的补码

-7+6 = -1
-7的补码和6的补码相加:11111001 + 00000110 = 11111111
11111111是-1的补码

4、二进制数据处理

位运算原则:与1相与保持不变,与0相与清零,故不需要改变的位就用1,不可用0.
(1)101 如何变成 100

思路→清零 -> 101 & 110=100 -> 110由~001得到
所以:~001 -> 110 -> 110&&101 ->100

(2)11111111,如何转化为11100111

思路→清零 ->11111111 & 11100111=11100111  ->
                     11100111由~00001100得到 -> 00001100 由011(3)左移3位得到
所以:00000011 -> 00000011<<3 ->00001100 -> ~00001100 ->11100111 ->
11100111 & 11111111=11100111

(3)左移位:值最左边的几位被丢弃,右边多出来的几个空位则由0补齐

如:清零:1011 0101 第八位清零
则:1<<7;[(1<<7)取反]->0111 1111;1011 0101与0111 1111相与->0011 0101
如:清零:0101 1101  第三、四、五位清零
则:111(7)<<2;[111(7)<<2取反]->1110 0011;0101 1101相与1110 0011->0100 0001

& 跟0与清0,跟1与不变 (与)
| 跟0或不变,跟1或置1 (或)
^ 跟0异或不变,跟1异或取反 (异或)
与(0)清0,或(1)置位,异或(1)取反。

编辑 2020-10-13 14:14 首次编辑
修改 2021-07-25 23:03 内容结构优化

注:本文旨于作为自己的学习笔记,不作他用。

标签:反码,符号,二进制,补码,C语言,十九,十进制,原码
来源: https://blog.csdn.net/weixin_45054982/article/details/119089764

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有