C++学习(四)(C语言部分)之 二进制
二进制学习时的笔记(其实也没什么用,留着给自己看的)
二进制简介
只有 0 1
优点:
1.二进制状态简单
2、可靠性、稳定性高
3、运算规则简单,简化设计
4、通用性强
二进制计算
正数二进制
十进制转二进制(除二直到0为止)
规则: 除二倒取余
或者 把一个数字拆成2的n次方相加
55=32+16+4+2+1
2^5+2^4+2^2+2^1+2^0
110111
负数二进制
-77 -1001101
用一位二进制位当作符号为 存符号
int 32位 char 8位
char -77 ——> 最高位当做符号位 1为负号 0位正号
1100 1101 (原码 原码在计算式会出错)
对原码取反
1011 0010 (除了符号位之外 全部取反 反码)
1011 0010+1=1011 0011 (反码加1)
存放的是补码 补码相加不会出错
8位二进制
16+(-13)
16 0001 0000
-13的二进制 1.原码 1000 1101
2.反码 1111 0010
3.补码 1111 0011
原码相加
0001 0000 +
1000 1101 =
1001 1101 (结果是错的)
补码相加
0001 0000 +
1111 0011 =
1 0001 0011 (只有8位,去掉最高位 结果正确)
规定正数的原码、反码和补码是一样的
小数的二进制 和浮点型数据的存放
小数的二进制 2^-6
存浮点型 精度 float 32位 才精确6-7位
32位
最高位 符号位 1位 存放符号 1为负数0为正数
8位指尾数位 1+172——>存到指数位 偏移量(127)
23位 尾数位
1.1001001 左移一位
1.1001001*2^1 //二进制的指数形式
10进制
110=1.10*10^2
-3.1415
1 1000 0000 1001 001 0000 0000 0000 0000
——>127 8位指数位 ——>-127~128 +2^7-1
*/
浮点型二进制
1.首先计算小数的二进制 2.将小数二进制转换成指数形式 3.将小数的符号位存在float的第一位,0为正数, 1为负数.指数部分加上偏移量,存入8位指数位 将指数形式的二进制的小数部分存入尾数位, 如果位数不够 ,在后面用0补齐 P.S 将小数换算成指数形式的时候,规则是将小 移动到第一个1的右边,左移几位就是乘以2的 几次幂
二次学习 补充笔记
数据--->二进制
除法 效率 计算机的除法用减法实现的
二进制的用途---> PS 美图 二进制操作
重点 计算二进制 (10进制数字转换二进制)
1.日常用的都是10进制 10进制-->二进制存放
3(D) 11(B)
进制不同但是可以表示一个东西
2.会算 (计算方式)
3.整数(必须 正数和负数) 浮点型(了解)
4.进制转换 2进制 8进制/16进制 10进制
2进制(计算机存放的方式)(代码中不用)
8进制/16进制 代替2进制(可以和2进制直接转换)
10进制 (平时用的进制)
1.整数的二进制
1.1 正数
int char(-128~127 0~127每个整数对应一个字符 ASCII)
170 123
除2求余
170的二进制 10101010
123的二进制 1111011
int 32位 补齐
0000 0000 0000 0000 0000 0000 0111 1011
char 8位二进制
0111 1011
unsigned 无符号
signed 有符号
(signed)int
unsigned (int) unsigned默认表示unsigned int
unsigned char
(signed)char 默认有符号
1.2 负数
有符号 能够存放负数
负数 3-2 --->3+(-2)
最高位 当作符号位 存放符号 0表示正数 1表示负数
char作为例子
3 0000 0011
-3 1000 0011(最高位当作符号位) --->用这个当作二进制的话 关于负数计算会出错
原码
反码 1111 1100 (原码 除符号位外 其余全部1变0 0变1)
补码 1111 1101 (反码加1)
整数负数二进制 存放的是补码
补码的原因 保证涉及到负数的二进制计算正确
取反加1码
特殊情况
1.char中-128的二进制
反码 1111 1111 原码 -->1000 0000 -128
补码 1000 0000
2.unsigned 存放负数问题
---->计算机用二进制处理数据 (不会报错 不代表没有错误)
按照语法来 (错误的代码再去考虑没有意义)
有符号和无符号 位数是一样的
二进制不分正负
格式占位符----->打印的方式
存放二进制不分正负的 解析方式不一样 处理的结果不一样
%u 无符号10进制整数
%d 有符号10进制整数
%x 无符号16进制整数
%o 无符号8进制整数
unsigned int x=-3;
unsigned int x=0xfffffffd;//代码中16进制表示的话前面加0x 8进制前面加0
//表示 把数据当作无符号整型处理
//计算机是否检查二进制
可以试试 用%d 打印float类型(可以打印 不会报错 但是结果不对)
-3 原码
1000 0000 0000 0000 0000 0000 0000 0011
1111 1111 1111 1111 1111 1111 1111 1100
1111 1111 1111 1111 1111 1111 1111 1101
1Byte =8bit
除法比较慢 整数除以2 >>1 右移一位 除以2
数据 超过范围--->溢出
char ch=-128; 1000 0000
ch--; 0111 1111--->127
2.浮点型二进制的存储(了解)
float double(1+11+52)
float存放数据的范围 -1.7*10^38~1.7*10^38
float 4个字节 32位 (有符号)1+8+23
1位 符号位
8位 指数位
23位 尾数位
-7.88
方法
1.先转2进制小数
符号保留
整数部分按照整数二进制求法
小数部分 乘2取整 从上往下放到小数点的右边
-111.11100001
小数点移动到第一个1的右边
-1.1111100001*2^2 指数形式 左移N位 *2^N
指数存 2 8位 计算方式比较特殊 指数+偏移量
2 +127--->129 1000 0001
加上一个偏移量 2^(指数位位数-1)-1
8位指数位 2^8 256 一半存负数和0 一半存正数
float的指数位的范围 -127~128
0000 0000 --->-127
0000 0001 --->-126
.....
1000 0000 --->1
1000 0001 ---->2
尾数位 小数点后面的内容 后面 补齐0
1 1000 0001 111 1100 0010 0000 0000 0000
浮点型 存放规则--->
结论
1.浮点型 存放不够精确
== 比较 x==4 整型
浮点型一般不用== 给他一个范围
d<=4.001&&d>=3.999
double和float 赋值一样但是保存的值不一样
float快 精度要求不高 float 不然double
**** 保存数据都是近似值
3.进制转换
10进制转2进制--->除2求余
10进制转8进制 除8求余
除16求余 (a~f 表示 10~15) 可以大写A~F
16进制 --->10进制
N进制转10进制
0xAF--->从右往左 从0开始依次标号
每一位*N^标号(求和)
2进制和16进制相互转换
0xAF
2进制--> 1010 1111
一位16进制转4位二进制
二进制转16进制
1100 0000 1111 1100 0010 0000 0000 0000
-->C0FC2000 四位转一位 -->0xC0FC2000
一位8进制转3位二进制 3位二进制转一位8进制
动笔算 --->最后的结论 全部写16进制-->直接提交结果
1.算二进制 (用char 8位算)
98
-76
选做
2. 算二进制(float 32位二进制算)
-3.625
short(int)
long (int)
2018.05.13 21:24:13
C++学习(四)(C语言部分)之 二进制的更多相关文章
- 值得学习的C语言开源项目
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工 ...
- 【C/C++开发】值得学习的C语言开源项目
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...
- GO学习-(19) Go语言基础之网络编程
Go语言基础之网络编程 现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程. 关于网络编程其 ...
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- TweenMax动画库学习(四)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- SQL的四种语言和数据库范式
1. SQL的四种语言 DDL(Data Definition Language)数据库定义语言 CREATE ALTER DROP TRUNCATE COMMENT RENAME DML(Data ...
- IOS学习笔记07---C语言函数-printf函数
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
随机推荐
- C++解析三
类的构造函数类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行.构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void.构造函数可用于为某些成员变量设置初始 ...
- vs2015 产品密钥
一.破解秘钥 企业版 HM6NR-QXX7C-DFW2Y-8B82K-WTYJV 专业版 HMGNV-WCYXV-X7G9W-YCX63-B98R2 二.破解步骤 1.安装vs2015 2 ...
- 跑caffe过程中的备忘
1*1卷积比如一张500*500且厚度depth为100的图片在20个filter上做1*1卷积,那么结果大小为500*500*20 只有池化改变图片的大小 一个大的全连接层可以理解为一个神经网络,这 ...
- Java小程序分析
public class Helloworld { public static void main(String[] args) { System.out.println("hello wo ...
- :工厂模式1:方法模式--Pizza
#ifndef __PIZZA_H__ #define __PIZZA_H__ class Pizza { public: Pizza(){} virtual ~Pizza(){} virtual c ...
- SQL-2 查找入职员工时间排名倒数第三的员工所有信息
题目描述 查找入职员工时间排名倒数第三的员工所有信息CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT ...
- DevExpress v18.1新版亮点——DevExtreme篇(一)
用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExtreme JavaScript Controls v18.1 的新功能 ...
- java8 字符串转换 list long Integer
String ids= "1,2,3,4,5,6"; List<Long> listIds = Arrays.asList(ids.split("," ...
- Java基础-常用工具类(一)
object类 Object 类是所有类的的父类,如果一个类没有明确使用EXPENTS关键字明确标识继承另外一个类,那么这个类默认继承object类,oject类中的方法适合所有子类 1)toStri ...
- spring相关jar包的作用讲解(转)
Spring各个jar包作用 原文链接:https://www.cnblogs.com/1995hxt/p/5255210.html Spring AOP:Spring的面向切面编程,提供AOP ...