IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言二进制数据-学习笔记(十九) -> 正文阅读

[C++知识库]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得到 -> 00001100011(3)左移3位得到
所以:00000011 -> 00000011<<3 ->00001100 -> ~00001100 ->11100111 ->
11100111 & 11111111=11100111

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

如:清零:1011 0101 第八位清零
则:1<<7;[(1<<7)取反]->0111 1111;1011 01010111 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++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 11:53:50  更:2021-07-26 11:54:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/20 12:03:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码