栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

深入解读C - 数据

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

深入解读C - 数据


文章目录
  • 前言
  • 参考资料
  • 一、数据是什么?
  • 二、数据类型
    • 1.整型
    • 2.浮点型
    • 3.构造类型
    • 4.指针类型
    • 5.空类型
  • 三.混合运算与类型转换
    • 1.转换等级
    • 2.转换规则
  • 四.源码反码补码
  • 五.大小端存储
    • 1.大端字节序
    • 2.小段字节序
  • 六.浮点数(IEEE754)
    • 1.二进制的储存
    • 2.E全为0时 M为任意值时
    • 3.E全为1时 M全为0时
    • 4.E全为1时 M不全为0时
  • 总结


前言

众所周知计算机在我们的的生活中十分强大,但“巧妇难为无米之炊”计算机再强大没有“米”也终归是毫无用处,这里的“米”便是数据


参考资料

《C Primer Plus》
《C和指针》
《大话数据结构》

一、数据是什么?

数据:是描述客观事物的符号, 是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅仅包括数值类型,还包括图像、视频、声音等非数值类型。

常量(constant):预先设定好,在整个程序的运行中没有变化。

变量(variable):在程序运行期间可能改变或被赋值。

二、数据类型 1.整型
关键字类型
char字符数据类型
short短整型
int整型
long长整型
long long更长的整形
unsigned无符号类型
2.浮点型

注意:浮点型必须有符号位,不可以写成unsigned

关键字类型
float单精度浮点数
double双精度浮点数
3.构造类型
关键字类型
arr[n]数组类型
struct结构体类型
enum枚举类型
union联合类型
4.指针类型
关键字类型
int *pi整型指针
char *pc字符指针
float* pf浮点型指针
void* pv无类型指针
5.空类型
关键字类型
void无类型

注:通常应用于函数的返回类型、函数的参数、指针类型

三.混合运算与类型转换 1.转换等级

int < unsigned int < long < unsigned long < float < double < long double

2.转换规则
  1. 若参与运算量的类型不同,则先转换成同一类型,然后进行运算

  2. 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。若两种类型的字节数不同,转换成字节数高的类型。若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型

  3. 所有的浮点运算都是以双精度进行的,即使是两个float单精度量运算的表达式,也要先转换成double型,再作运算

  4. char型和short型参与运算时,必须先转换成int型

  5. 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度

四.源码反码补码

1.二进制的最左边最高位第一位: 0 代表正;1 代表负

2.只要是整数二进制储存的都是补码

3.正数原码、反码、补码相同

4.负数 以-2为例

原码: 10000000000000000000000000000010
反码: 11111111111111111111111111111101 (最高位符号位不变,其它位取反)
补码: 11111111111111111111111111111110 (在反码的基础上+1)

5.内存正负分配原理 (-1 与 0 左右各占一半,趋于中心)

补码:   0 = 00000000000000000000000000000000
补码:   向中间最大值逼近
补码: max = 01111111111111111111111111111111
补码: 分水岭: 最大值+1 == 最小值
补码: min = 10000000000000000000000000000000
补码:   向中间最小值逼近
补码:  -1 = 11111111111111111111111111111111

五.大小端存储

存储: int a = 0x11223344

1.大端字节序

把数据的低位字节序的内容存放在高地址处,高位字节序的内容存放在低地址处

低地址------------------11 22 33 44-------------------高地址

2.小段字节序

把数据的低位字节序的内容存放在低地址处,高位字节序的内容存放在高地址处

低地址------------------44 33 22 11-------------------高地址

六.浮点数(IEEE754) 1.二进制的储存
  1. (-1)^S * M * 2^E (二进制下科学记述法形式)
  2. S(符号): 0为正,1为负
  3. M(尾数): 小数点后的数,小数点前面1不储存,1.会自动补齐,尾数不足自动补0
  4. E(阶码): 科学技术法的几次方,0次方为127: 01111111
  5. (-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。
  6. M表示有效数字,大于等于1,小于2。
  7. 2^E表示指数位。
  8. 源码:0(符号位)01111111(E)00000000000000000000000(M)

float a = 5.5

二进制形式: 101.1
S = 0; E = 2 + 127; M = 1.011;
二进制: 0 10000001 01100000000000000000000
二进制: 0100 0000 1011 0000 0000 0000 0000 0000
十六进制: 40 b0 00 00
2.E全为0时 M为任意值时
  1. 表示: 正负0 (即0.1xxxx*-126)
  2. 二进制: 0 00000000 xxxxxxxxxxxxxxxxxxxxxxx
  3. 这时,浮点数的指数E等于1-127(或者1-1023)即为非规格化的-126(或者-1022)
  4. 有效数字M不再加上第一位的1,而是还原为0.1xxxxxx的小数(即为非规格化)
  5. 这样做是为了表示±0,以及接近于0的很小的数字。
  6. 作为补偿,尾数右移一位舍缩小含的“1”,同时阶码逻辑上+1
  7. 来表示被覆盖的1.0^-127。阶码+1则正好是非规格化的-126
3.E全为1时 M全为0时
  1. 表示: 正负无穷大 (即10.0000*254)
  2. 二进制: 0 11111111 00000000000000000000000
  3. 这时,浮点数的指数E等于255-1(或者2047-1)即为非规格化的 254(或者 2046)
  4. 有效数字M不再加上第一位的1,而是还原为 10.00000的小数(即为非规格化)
  5. 作为补偿,尾数左移一位放大隐含的“1”,同时阶码逻辑上-1
  6. 来表示被覆盖的1.0^255。阶码+1则正好是非规格化的254
4.E全为1时 M不全为0时
  1. 表示: NaN(未定义或不可表示的值)

总结

C语言有多种数据类型,基本数据类型分为两大类: 整数类型和浮点数类型,通过类型分配的存储量和有无符号,衍生出许多其他数据类型。整型又可以以二进制的方式通过补码的形式存储在内存单元,浮点数则用的是IEEE754的浮点数存储标准进行存储。数据在C语言中有着极其重要的地位,非常值得深入了解学习,本文如出现错误欢迎指点交流。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917267.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号