C语言基本数据类型
来源:互联网 发布:淘宝潮男装店铺排行 编辑:程序博客网 时间:2024/04/28 00:07
C语言中基本的数据类型有char、short、int、long 、float、double,在32位系统下,其占据的内存空间分别为:
类型
char
short
int
long
float
double
大小(字节)
1
2
4
8
4
8
现在主要对char、int、float这三种常用的数据类型进行讨论,其他数据类型是这三种类型的简单延伸,下面的实验是在32位x86平台下进行的。
首先计算机中存放有符号数据是以补码的形式存储的,正数的补码还是本身,负数的补码是源码取反后加1。这样做的好处是
l 可以让符号位参与运算,计算机不会区别有符号数还是无符号数,统一对数据进行运算,这样采用补码的话,减法运算可以转化为加法运算,提高了速度。
l 如果不采用补码的话,char型0的机器数编码会有2个,(+0)00000000和(-0)10000000,这样进行数据运算会产生矛盾,而采用补码的话二进制10000000表示(-128)
1. Int型数据
Int型数据在该平台下占据4个字节,由于X86是小端模式,数据的低字节放入低地址,高字节放入高地址,比如
Int a = 100000;//0x186A0
如下图所示,数据从地址0x0012FF7C开始存放,可以看到最低的低字节0xA0放在最低的地址上,是一种小端模式。
0x0012FF7C
A0
0x0012FF7E
86
0x0012FF7F
01
0x0012FF80
00
0x0012FF81
0x0012FF82
2. float型数据
float型数据在该平台下为4个字节,其中各个位的意义如下表所示:
类型
符号位
阶码
尾数
长度
float
1
8
23
32
下面以float数据12.8来说明:
12.8表示成二进制数为1100.11001100110011001101,为了确定阶码,需要对其进行移位,直到小数点位于第一个1后面,12.8的小数点需要左移3位,IEEE规定float型阶码=127+移位值,当左移时,移位值为正数,当右移时,移位值为负数。这里阶码=127+3=130=1000001
尾数是移位后小数点之后的的23位,为10011001100110011001101
所以float型数据12.8的机器码为:
0-1000001-10011001100110011001101
其十六进制表示为0x414CCCCD
其在内存中的表示为
0x0012FF7C
CD
0x0012FF7E
CC
0x0012FF7F
4C
0x0012FF80
41
0x0012FF81
0x0012FF82
3、char型
char型数据在该平台下为1个字节,这里我们也可以利用char型的数组验证float型数据的存储格式。
char a[4] = {0xCD,0xCC,0x4C,0x41};
float *j = (float*)a;
printf(“%d\n”,*j);
可以得到*j为12.8
总结:
各个数据类型让数据在内存中有不同的组织形式,利用指针可以对同一段内存区域的数据进行不同的解读。
- c语言-数据类型-基本数据类型
- C语言基本数据类型
- c语言基本数据类型
- C语言--基本数据类型
- C语言 -- 基本数据类型
- C语言基本数据类型
- C语言基本数据类型
- c语言基本数据类型
- C语言基本数据类型
- C语言基本数据类型
- C语言基本数据类型
- C语言-基本数据类型
- c语言基本数据类型
- C语言基本数据类型
- C语言基本数据类型
- C语言基本数据类型
- C语言基本数据类型
- C语言基本数据类型
- Google开源的Deep-Learning项目word2vec处理中文
- 三张TD-LTE牌照带来的遗憾和忧虑
- HDU 1978 How many ways(dfs)
- oracle 12c创建用户
- Maven系列之01-开发环境搭建
- C语言基本数据类型
- FLEX学习-3 树形控件和分割器
- Deep learning----------Self-taught learning
- su 和su -的区别
- 黑马程序员 LINQ(1) 介绍LINQ、语法 总结
- C++学习笔记(三)
- cocos2d-x 植物大战僵尸(7) 触摸植物卡产生植物枪
- Single Number II
- 遍历聚合对象中的元素——迭代器模式(一)