C温故补缺(一):数据类型和基本类型占位
数据类型
基本类型:就是算术类型,包括整型和实型
枚举类型:一组离散的整数
void类型:无可用值类型
派生类型:指针(*),数组([]),结构体(struct),共用体(union),函数(fun())
基本类型占位
32位平台:
| 整型 | 实型 |
|---|---|
| short:2 | float:4 |
| int:4 | double:8 |
| long:4 |
16位平台:
| 整型 | 实型 |
|---|---|
| int:2 | float:4 |
| short int/short:2 | double:8 |
| long int/long:2 | long double:16 |
所有的整形加上unsigned就是无符号数,范围加倍,占位不变
char占一个字节
数据类型的本质
数据的类型只是一个标签,人为规定他们存什么样的数据,但实际int long是一样的内存空间:都是4个字节,32位.char则是1个字节,8位,这8位可以存8个二进制位,至于它是什么值,是由编译器处理的.对于cpu来说,都是相同的二进制位.
在gcc编译器中,char,int,unsigned/signed,short,long等整型是直接存储其二进制位的,他们在表示数时只是长度和范围不同,还有以及规定的输出格式不同(%c和%d)
而float和double两个浮点型是用专门的标志标记其类型的
如:
int main(){
char c='a';
int a=1;
int a1=2;
int a2=3;
float b1=4;
float b2=5.5f;
double b5=6;
double b6=7.7f;
return 0;
}
定义了char,int,float和double型的变量并赋值,看其汇编后的结果
call __main
movb $97, -1(%rbp)
movl $1, -8(%rbp)
movl $2, -12(%rbp)
movl $3, -16(%rbp)
movss .LC0(%rip), %xmm0
movss %xmm0, -20(%rbp)
movss .LC1(%rip), %xmm0
movss %xmm0, -24(%rbp)
movsd .LC2(%rip), %xmm0
movsd %xmm0, -32(%rbp)
movsd .LC3(%rip), %xmm0
movsd %xmm0, -40(%rbp)
movl $0, %eax
addq $80, %rsp
popq %rbp
ret
.seh_endproc
.section .rdata,"dr"
.align 4
.LC0:
.long 1082130432
.align 4
.LC1:
.long 1085276160
.align 8
.LC2:
.long 0
.long 1075314688
.align 8
.LC3:
.long -1073741824
.long 1075760332
.ident "GCC: (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0"
可以看到,char和int型在汇编时都是直接把操作数mov到bp寄存器的,也就是cpu可以直接操作其运算
而float和double则存在IP指令指针寄存器,并用LC标志其类型和内存对齐系数,也就是说,浮点数需要额外的指令来操作,并最终在Xmm寄存器运算
Xmm寄存器
XMM寄存器是一个完全独立的寄存器集,随SSE(浮点数指令集)一起引入,至今仍广泛使用。它们的宽度为128位,其指令可以将它们视为64、32(整数和浮点),16或8位(仅整数)值的数组。在32位模式下有8个,在64位模式下有16个。几乎所有浮点数学运算都是在64位模式下在SSE(以及XMM寄存器)中完成的
C温故补缺(一):数据类型和基本类型占位的更多相关文章
- 由js apply与call方法想到的js数据类型(原始类型和引用类型)
原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b, ...
- MySQL日期数据类型、时间类型使用总结
MySQL日期数据类型.时间类型使用总结 MySQL日期数据类型.MySQL时间类型使用总结,需要的朋友可以参考下. MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 ...
- ABAP基本数据类型、通用类型
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- MySQL数据库数据类型之集合类型SET测试总结
MySQL数据库提供针对字符串存储的一种特殊数据类型:集合类型SET,这种数据类型可以给予我们更多提高性能.降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特性总结,其后又分别 ...
- Delphi 基本数据类型列表 高级数据类型列表 字符类型查询列表清单
原文:Delphi 基本数据类型列表 高级数据类型列表 字符类型查询列表清单 长长的列表文字类型文件 分类 范围 字节 备注 简单类型 序数 整数 Integer -2147483648 .. 214 ...
- MySQL (二)-- 数据类型(列类型)、数值类型、 小数类型、 时间日期类型、 字符串类型 、 MySQL记录长度、列属性
1 数据类型(列类型) 所谓的数据类型:对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类: 2 数值类型 数值类型数据:都 ...
- redis数据类型-散列类型
Redis数据类型 散列类型 Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他 ...
- Mysql 数据类型、约束类型
mysql数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准 ...
- go数据类型之基本类型
基本数据类型 数值型 整数 int 64位操作系统默认为int64,32位操作系统为int32,但是类型检查时时int int8 (byte 1字节) int16 (short 2字节) int32 ...
- Java基础之基本数据类型的包装类型
Java的基本数据类型的包装数据类型有多种: int Integer,short Short,boolean Boolean,float Float,double Double等等. Java包装类数 ...
随机推荐
- .Net之接口小知识
目的 通过一个简单的项目,在原来的文章基础上完善一下常用的几种WebApi编写方式以及请求方式,一方面是用于给我一个前端朋友用来学习调用接口,另一方面让我测试HttpClient的一些效果. 本文示例 ...
- linux下搭建ftp文件服务器
linux下搭建ftp文件服务器 一.搭建步骤(以在centos7中搭建为例) 1.首先检查一下系统中是否已经安装了vsftpd软件 # 查看是否安装vsftpd rpm -q vsftpd rpm ...
- kali安装vscode(deb包)
如果在虚拟机下安装,则你可以在主机下载,然后复制到具有可读可写的文件夹,比如root用户的话就在/root下面 打开终端,切换到软件终端,输入安装命令dpkg -i code...按table键自动补 ...
- 使用 Win2D 实现融合效果
1. 融合效果 在 CSS 中有一种实现融合效果的技巧,使用模糊滤镜(blur)叠加对比度滤镜(contrast)使两个接近的元素看上去"粘"在一起,如下图所示: 博客园的 Cho ...
- C++ "链链"不忘@必有回响之双向链表
C++ "链链"不忘@必有回响之双向链表 1. 前言 写过一篇与单链表相关的博文(https://blog.51cto.com/gkcode/5681771),实际应用中,双向循环 ...
- 8.X 的安装配置简化体现
文章转载自:https://mp.weixin.qq.com/s/CEYYKUub81mk59B3lqAcBA 节点无需任何安全配置,即可实现 TLS 加密通信.Https 加密通信. TLS 应用于 ...
- python基础-较复杂数据类型预览
1.初识列表 列表就是队列: 列表是一种有序的,且内容可重复的数据类型: 用list代表列表,也可以用list()定义一个列表,同时定义列表可以直接使用 [ ]: python中列表是 ...
- Windows7下驱动开发与调试体系构建——1.驱动开发的环境准备
目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 系统基础环境 开发环境 win7下开发驱动需要安装vs,这里使用2017. 安装vs ...
- SystemParametersInfo函数说明
SystemParametersinfo 返回值:如果函数调用成功,返回值非零:如果函数调用失败,那么返回值为零.若想获取更多错误信息,请调用GetLastError函数. SystemParamet ...
- JS 可编辑表格的实现
1.实现效果 用户点击语文,数学,英语部分的单元格,可以实现分数的编辑,总分也会随之变化.先看下效果,如图: 2.设计思路 先通过HTML5+CSS3绘制表格,添加input的样式和err提示动画. ...