【C 学习】04.2-数据保存

“知道做不到就是不知道”

一、常量

1. 整型

(1)十进制转换为二进制:除2取余法

【04.1】数字化基础 https://blog.csdn.net/c_QFy_17/article/details/128994535

(2)8个bit(位),变成一个byte(字节)。常见的位数:8,16,32,64

所以如果只有6个位,就需要在前面添零补齐8位:100011——00100011  

(3)负数:
①原码:最高位表示符号(0为正,1为负),其余位表示数值的绝对值;但是相反数加和,结果≠0.
②反码:最高位依旧是符号位,值为1,数值部分按位取反(原码的绝对值取反);但相反数相加≠0.
补码:最高位依旧是符号位,值为1,数值部分为​​反码加1​​(即原码绝对值取反后加1).
        i.举例:5—00000101;-5—11111011

把两者相加,是可以得到“100000000”的,前面的“1”超出8个字节,去掉,直接结果=0.(perfect!!)

  • 原码 → 反码:符号位不变,数值部分按位取反。

  • 反码 → 补码:符号位不变,加1

  • 原码 → 补码:符号位不变,数值部分按位取反后加1。

        iii.用处:
        ①减法:计算机只会做加法,理论上的减法在计算机中只能理解为加上一个负数;
        ②乘法:乘2,左移一位——最高位丢弃,尾部补零
        ③除法:除2,右移一位——丢弃最低位,前部补零

11111111被当作纯二进制原码看待时,就是255;被当作补码看待时就是-1(因为11111111+1=100000000=0)

 

补码表示的范围负数部分总比正数多1。

 

(4)整型数据的表示范围:
位长(0和1的个数):4/8/16/32/64(种数:2^4 、 2^8 ……)


②有符号否(以四位为例):
        a)无符号数(int):全部位数都用来表示数值。范围0000-1111(0-15)
        b)有符号数(unsigned int):最高位表示符号(0-正;1-负),剩下的才表示数字大小。范围1000-0111(-8~7)

上面两中表示方法,都有16个数——16种(2^4)

默认int类型
        a)不属于C++标准
        b)原则:char <= short int(=short) <= int <= long int <= long long int(区别在于所占字节的多少)


④整数字面值(有别于“字符型\”)
        a)用具体数值表示的数值,可以直接看出其值的大小;
        b)三种表示方法
        i.十进制:常见的认知中的自然数;
        ii.十六进制:0x或0X开头的数(4位)。
        iii.八进制:0开头的数字(3位)。

注意转化为十进制时的计算方法!

        c)后缀:
        i.要区分是有符号还是没符号:无符号就是在数字末尾加上U或者u
        ii.长整型:在数字后面加上L或者l(小写的L);

2. 整数子类

(1)字符型 char:

        ①字符在计算机内部保存为ASCII值,就是字符和整数之间的关系,共有128个,范围是0-127.(注意在输出的时候占位符是“%c”) 
      ②分类
        a). 可见cont(就是上表的32-126)。
        1.其保存方法:用相应的数字代码或者用单引号直接写需要的字符。

比如,要在char c里面保存大写的字母A,可以是“c=65”;,也可以是“c=‘A’”;

要记住0-9、a-z、A-Z对应的ASCII码值。

        2.转义字符法:
       ⅰ.\ddd(d=0~7):ddd为8进制数
        ⅱ.\xhh(h=0-9以及A-G):hh为16进制数

         b). 不可见cont(0-31,127)
       常见 - 转义字符:

\a: 相当于\007; 相当于\x07;代表响铃
\b: 相当于\010;相当于\x08;代表光标(下一个将要输出的位置)退格
\t: 相当于\x09;从当前光标移动到下一个制表符位置(8的倍数+1列)
\n: 相当于\x09;表示回车并换行(是下一行的第一列)
\v:相当于\x0B;表示垂直制表符(在打印机上才实现)
\r:相当于\x0D;只表示回车(回到当前行首并覆盖)
\’: 相当于\x27;相当于\047;输出语句中打印’
\\:相当于\x09;输出语句中打印\
\?: 相当于\x3f;在表示字符是需要转义;但是在字符串中,可以不转义。

 (2)实型常量

        ①小数形式:123.456
        ②指数形式:12.34e3(表示12.34乘10的三次方;用e/E来表示指数次方)

指数形式的格式要求与常规数学上的要求是一致的,只不过用e来表示“次方”。

(3)字符串常量:“boy”、“123”

(4)符号常量

#define PI 3.1416(经编译后,一旦在代码内出现PI,就相当于3.1416)

【行末一定是没有分号的】=const double PI=3.1416;【有分号】

注意:
1.从常量的形式可以判定其类型,所以没有特别标明int、double...;
2.不带小数点的是整形常量,但应注意其有效范围;
3.C编译系统把浮点型常量都按双精度处理,分配8个字节。

 

二、变量(存储单元)

1. 基本原理:计算机内部有很多bit(总共统计为G),如果你的电脑是64位,每8个字节(64个位)就可以储存一个固有类型的变量。所以如果我定义了变量但并不改变它的值(初始化),打印时,就会显示电脑内部原有的值(8个位)【没有规律的数字】;
2. 标识符:只能由字母、数字和下划线三种字符组成;并且第一个字符不能是数字;还要避开关键字:


3. 数据类型(长度和存储形式):
4.整形数据:
        ①只有整形(包括字符型)数据才可以加signed和unsigned修饰符,实型数据不能加。
        ②对无符号整形数据用“%u”格式输出(表示无符号十进制数格式)。
        ③在将一个变量定义为无符号数据之后,就不应该将它再赋予一个负值,否则会得到错误的结果。
 

 5.字符变量

 以数字1和字符‘1’为例来理解:
(1)字符‘1’只是代表一个形状为‘1’的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占一个字节【00110001(二进制)】;
(2)数字1是以整数存储方式(int)存储的,占2或4个字节【0000000000000001】
(3)区别:整数运算1+1=2;而字符运算‘1’+‘1’=49+49=98. 

 6.浮点型数据

(1)举例:3.14159=3.14159*100=31.4159*101=314.159*102
(2)由于小数点的位置可以浮动,所以实数的指数形式称为浮点数
(3)类型:float、double、long double

理解:由于二进制形式表示一个实数以及存储单元的长度是有限的,因此不可能得到完全精确的值,只能存储成有限的精确度。小数部分占有的bit数越多,数的有效数字越多,精度也就越高。指数部分占的位数越多,则能表示的数值范围越大。

7.实型数据: 也称为浮点数或实数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式和指数形式。

注意:实型常数不分单、双精度,都按双精度double型处理。

补充:常量、变量和类型:

1.语句:float a=3.14159;  //3.14159为双精度浮点常量,分配8个字节;a为float变量,分配4个字节。
2. 上述语句在执行时可能会发出警告(warning),告知强制执行会损失精度。一般不会影响结果的正确性,但是会影响结果的准确性。
3. 可以在常量的末尾加专用字符,强制置顶常量的类型:float a=3.14159f;  //将3.14159作为单精度浮点常量处理,这样处理就不会发出警告。
4. 类型是变量的一个重要属性,只能用来声明,不能用来接收具体的值(需要变量名)。
 

三、翁恺老师的形象解释

1. 在计算机内存储的二进制数是一样的,为什么输出的结果会不一样?原因就在于,定义的变量类型,不同类型所占字节数量不同


2. 整数的范围:右边(最小值)总比左边(最大值)少1,这是为什么?——中间还有0啊,同时,按照二进制的计算规则,刚好。


3. 强调一下“unsigned”:
 ①如果有char类变量变成unsigned了,就无法再表示负数,但是其正整数的表达范围就比原来多一倍。

但是其初衷并不是为了扩大整数范围,而是为了做二进制运算,让最高位的1 不起作用,主要是为了移位。

  ②如果是char类型(最高位表示符号),其最大值是127,最小值是-128。如果在char a=127的前提下加1,就会变成a= -128,就像是一个圆圈,转回去。(-128)-1的话又会变成127.


4. 但如果更改成了unsigned类型,就是0-1=255;255+1=0.

写在最后:

更新C语言学习笔记

如有错误,烦请多多批评指正!

<think>嗯,用户问的是MySQL版本5.7.28-0ubuntu0.16.04.2-log。首先,我需要分解这个版本号的各个部分,逐一解释。 首先,主版本号是5.7.28,这里要确认MySQL的版本命名规则。通常格式是主版本.次版本.发布版本,所以5.7.28属于5.7系列的第28次更新。可能用户想知道这个版本有什么特性或修复。 然后是-0ubuntu0.16.04.2,这部分看起来和Ubuntu相关。Ubuntu的软件包版本通常会在上游版本后面加上自己的修订号。0ubuntu0.16.04.2可能表示这是针对Ubuntu 16.04 Xenial Xerus的第二次构建。可能需要确认Ubuntu的版本号格式,以及这个包是否由Ubuntu维护团队打过补丁。 最后的-log后缀,在MySQL中通常表示该版本启用了日志功能,或者编译时包含了特定的日志支持。需要回想MySQL的编译选项,比如是否区分-log和-community版本,或者是否有其他含义。可能用户关心的是日志相关的特性或优化。 接下来,用户可能想知道这个版本的安全更新、修复的漏洞,或者与标准MySQL 5.7.28的区别。比如,Ubuntu维护的版本是否包含额外的补丁,或者是否建议升级到更高版本,尤其是考虑到Ubuntu 16.04已经结束标准支持,可能进入扩展安全维护阶段。 还要考虑用户的实际需求。他们可能在管理服务器时遇到了问题,需要确认MySQL版本是否存在已知问题,或者是否应该升级。需要建议检查官方文档、Ubuntu的安全公告,以及考虑升级到受支持的MySQL版本,比如5.7的后续更新或8.0版本。 最后,确保回答清晰,分点解释每个部分,并提供相关建议,比如升级路径或安全建议。可能需要提醒用户注意Ubuntu 16.04的支持状态,以及MySQL 5.7的生命周期,确保他们了解潜在的安全风险。</think>MySQL版本号 `5.7.28-0ubuntu0.16.04.2-log` 是一个包含多个信息的完整版本标识,下面逐步解析其含义: --- ### 1. **主版本号 `5.7.28`** - **5.7**: 表示这是MySQL的 **主版本(Major Version)和次版本(Minor Version)**,即MySQL 5.7系列。 - 5.7系列是长期支持版本(LTS),提供稳定的功能和安全更新。 - 此版本发布于2018年,是5.7系列的第28次更新(`28`为发布版本号),修复了此前版本的漏洞并优化性能。 --- ### 2. **构建标识 `0ubuntu0.16.04.2`** - **`ubuntu0.16.04.2`**: 表示该版本由 **Ubuntu团队针对Ubuntu 16.04 LTS(Xenial Xerus)系统** 定制构建。 - `0`和`0`是Ubuntu内部构建编号。 - `16.04`对应Ubuntu发行版代号,发布于2016年4月(2021年4月结束标准支持,但可能通过扩展安全维护获得更新)。 - `2`表示这是Ubuntu对该MySQL包的第二次修订(可能包含安全补丁或适配性调整)。 --- ### 3. **后缀 `-log`** - **`-log`**: 表示该MySQL版本启用了 **二进制日志功能(Binary Logging)**。 - 二进制日志用于主从复制(Replication)和基于时间点的恢复(Point-in-Time Recovery)。 - 编译时默认启用该功能,区别于某些定制版本可能关闭此特性。 --- ### 4. **关键信息与建议** - **安全性与更新**: - MySQL 5.7系列已于2023年10月结束官方支持(EOL),建议升级至MySQL 8.0或更高版本。 - Ubuntu 16.04 LTS也已在2021年结束标准支持,需通过[Ubuntu Extended Security Maintenance (ESM)](https://ubuntu.com/esm)获取安全更新。 - **兼容性**: - 该版本适用于Ubuntu 16.04系统,若升级操作系统(如Ubuntu 20.04/22.04),需同步更新MySQL版本。 --- ### 5. **验证版本信息** 通过MySQL命令行验证: ```sql SHOW VARIABLES LIKE "%version%"; ``` 输出示例: ``` +-------------------------+------------------------------+ | Variable_name | Value | +-------------------------+------------------------------+ | version | 5.7.28-0ubuntu0.16.04.2-log | | version_comment | (Ubuntu) | | version_compile_machine | x86_64 | | version_compile_os | Linux | +-------------------------+------------------------------+ ``` --- ### 总结 该版本是 **Ubuntu为16.04系统定制的MySQL 5.7.28版本**,启用了二进制日志功能。由于系统和MySQL版本均已过官方支持周期,建议尽快升级至受支持的组合(如Ubuntu 22.04 LTS + MySQL 8.0)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值