int,double与机器字长
机器字长:计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度
想深入了解. 学好汇编语言对你帮助非常大.
汇编语言中的,最基本的数据类型有: (1) byte (2)word (3)double word
当然,还有qdword类型(8个字节)等。
这些数据类型由机器架构决定。
也就是说:1字节,2字节,4字节,8字节。每移一位就是2的倍数。
C语言的低级的高级语言,实现上是模拟汇编语言。
char 必须对应 byte , 所以它的类型固定是1个字节。否则就没有相应的类型访问1个字节的数据。
short 也必须对应于 word, 所以它的类型是2个字节。否则没有相应的类型访部2个字节的数据。
至于int 类型:
(1)x86架构的机器,基本都是32位。但是初始于实模式下,它是16位的。
(2)16位下,它只能访问16位的地址空间。
(3)所以,16位下,无论是int, long, long long(如果有的话) 都只能访问16位数据。即word
(4)在32位保护模式下,可以一次访问32位地址空间。那么,int 对应于double word,long 和
long long都只能一次访问32位数据。long long 模拟访问64位数据。实际上是只能访问32位数据。
(5)当x86-64架构,被初始化于long mode中的64位模式下,long 相对应于64位数据。但也要看操作系统和编译器的支持度。
算术类型的存储空间按照机器而定。一般,short类型为半个机器字长,int为一个机器字长,long为1或2个机器字长,float为一个机器字 长,double为两个字,long double用3或4个字长。C++标准规定的是每个算术类型的最小存储空间,但其并不阻止编译器用更大的存储空间。如果要保证移植性,尽量用 __int16 __int32 __int64吧,或者自己typedef int INT32一下。
数据类型名称 | 字节数 | 别名 | 取值范围 |
int | * | signed,signed int | 由操作系统决定,即与操作系统的"字长"有关 |
unsigned int | * | unsigned | 由操作系统决定,即与操作系统的"字长"有关 |
__int8 | 1 | char,signed char | –128 到 127 |
__int16 | 2 | short,short int,signed short int | –32,768 到 32,767 |
__int32 | 4 | signed,signed int | –2,147,483,648 到 2,147,483,647 |
__int64 | 8 | 无 | –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
bool | 1 | 无 | false 或 true |
char | 1 | signed char | –128 到 127 |
unsigned char | 1 | 无 | 0 到 255 |
short | 2 | short int,signed short int | –32,768 到 32,767 |
unsigned short | 2 | unsigned short int | 0 到 65,535 |
long | 4 | long int,signed long int | –2,147,483,648 到 2,147,483,647 |
long long | 8 | none (but equivalent to __int64) | –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long | 4 | unsigned long int | 0 到 4,294,967,295 |
enum | * | 无 | 由操作系统决定,即与操作系统的"字长"有关 |
float | 4 | 无 | 3.4E +/- 38 (7 digits) |
double | 8 | 无 | 1.7E +/- 308 (15 digits) |
long double | 8 | 无 | 1.7E +/- 308 (15 digits) |
wchar_t | 2 | __wchar_t | 0 到 65,535 |
(P:指针的大小为定值4个字节)
IA32
char 1
short 2
int 4
long 4
long long 8
float 4
double 8
long double 12
pointer 4
EMT64
char 1
short 2
int 4
long 8
long long 8
float 4
double 8
long double 16
pointer 8
以下内容引自别人的博客http://hi.baidu.com/qinpc/blog/item/15c8ac64a10c10f5f736540a.html
int类型比较特殊,具体的字节数同机器字长和编译器有关。如果要保证移植性,尽量用__int16 __int32 __int64吧,或者自己typedef int INT32一下。
C、C++标准中只规定了某种类型的最小字节数(防止溢出)
64位指的是cpu通用寄存器的数据宽度是64位的。找到一个图
数据类型名称 字节数 别名 取值范围 int * signed,signed int 由操作系统决定,即与操作系统的"字长"有关 unsigned int * unsigned 由操作系统决定,即与操作系统的"字长"有关 __int8 1 char,signed char –128 到 127 __int16 2 short,short int,signed short int –32,768 到 32,767 __int32 4 signed,signed int –2,147,483,648 到 2,147,483,647 __int64 8 无 –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 bool 1 无 false 或 true char 1 signed char –128 到 127 unsigned char 1 无 0 到 255 short 2 short int,signed short int –32,768 到 32,767 unsigned short 2 unsigned short int 0 到 65,535 long 4 long int,signed long int –2,147,483,648 到 2,147,483,647 long long 8 none (but equivalent to __int64) –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 unsigned long 4 unsigned long int 0 到 4,294,967,295 enum * 无 由操作系统决定,即与操作系统的"字长"有关 float 4 无 3.4E +/- 38 (7 digits) double 8 无 1.7E +/- 308 (15 digits) long double 8 无 1.7E +/- 308 (15 digits) wchar_t 2 __wchar_t 0 到 65,535
类型标识符 类型说明 长度
(字节) 范围 备注 char 字符型 1 -128 ~ 127 -27 ~ (27 -1) unsigned char 无符字符型 1 0 ~ 255 0 ~ (28 -1) short int 短整型 2 -32768 ~ 32767 2-15 ~ (215 - 1) unsigned short int 无符短整型 2 0 ~ 65535 0 ~ (216 - 1) int 整型 4 -2147483648 ~ 2147483647 -231 ~ (231 - 1) unsigned int 无符整型 4 0 ~ 4294967295 0 ~ (232-1) float 实型(单精度) 4 1.18*10-38 ~ 3.40*1038 7位有效位 double 实型(双精度) 8 2.23*10-308 ~ 1.79*10308 15位有效位 long double 实型(长双精度) 10 3.37*10-4932 ~ 1.18*104932 19位有效位
C++中定义了一组表示整数、浮点数、单个字符和布尔值的算术类型(arithmetic type)。
另外还定义了一种叫做void的特殊类型。void类型没有对应的值,仅用在有限的一些情况下,通常用作无返回值函数的返回类型。
算术类型的存储空间依机器而定。这里的存储空间是指用来表示该类型的二进制位(bit)数。
C++标准规定了每个算术类型的最小存储空间,但它并不阻止编译器使用更大的存储空间。
事实上,对于int类型,几乎所有的编译器使用的存储空间都比所要求的大。
因为位数不同,这些类型所能表示的最大(最小)值也因机器的不同而有所不同。
C++算术类型的最小存储空间
类型+含义+最小存储空间如下:
bool 布尔型
char 字符型 8位
wchar_t 宽字符型 16位
short 短整型 16位
int 整形 16位
long 长整形 32位
float 单精度浮点型 6为有效数字
double 双精度浮点型 10位有效数字
long double 扩展精度浮点型 10位有效数字
整形
表示整数、字符和布尔值的算术类型合称为整形(integral type)。
通常将8位的块作为一个字节,32位或4个字节作为一个字(word).
一般的,short类型为半个机器字(word)长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机器中int类型和long类型通常字长是相同的)。
bool类型表示true和false。可以将算术类型的任何值赋给bool对象。
0值算术类型代表false,其他任何非零的值都代表true。
符号
除bool类型外,整形可以是带符号的(signed)也可以是无符号的(unsigned)。
无符号类型只能表示大于等于0的数,而带符号整形可以表示正数和负数。
整形int,short和long都默认为带符号型。
要获得无符号型则必须指定该类型为unsigned。比如unsigned long。
unsigned int 可以简写为unsigned。
浮点型
类型float、double和long double分别表示单精度浮点数、双精度浮点数和扩展精度浮点数。
一般float用一个字(32位)来表示,double类型用两个字(64位来表示),long double类型用三个或四个字(96或128位)来表示。
float型只能保证6位有效数字,而double型至少可以保证10位有效数字。
int,double与机器字长的更多相关文章
- int 占一个机器字长
int与short int是不一样的. C++标准规定,int占一个机器字长.在32位系统中int占32位,也就是4个字节, 而在老式的16位系统中,int占16位,即2个字节. 而C++标准中只限制 ...
- CPU位数、操作系统位数、机器字长、C/C++基本数据类型长度
1.CPU位数=CPU中寄存器的位数=CPU能够一次并行处理的数据宽度(位数)=数据总线宽度: //现在的计算机处理器一般都是64位,这是硬件的事. 2.CPU为了实现其功能设计了指令集,即是CPU的 ...
- C# 判断字符串是否是int/double
using System.Text.RegularExpressions; /// <summary> /// 判断字符串是否是int/double /// </summary> ...
- .build_release/lib/libcaffe.so: undefined reference to `cv::VideoCapture::set(int, double)'
CXX/LD -o .build_release/tools/convert_imageset.bin.build_release/lib/libcaffe.so: undefined referen ...
- CodeForces - 93B(贪心+vector<pair<int,double> >+double 的精度操作
题目链接:http://codeforces.com/problemset/problem/93/B B. End of Exams time limit per test 1 second memo ...
- string 与 int double 的转化
#include <iostream> #include <string> #include <sstream> using namespace std; int ...
- 用C#.NET调用Java开发的WebService传递int,double问题
用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和D ...
- int/double/string使用
在计算机中存储数据和儿童在抽屉中存放物品很类似. 例如: 要在计算机中存一个数字50,需要两句话. int a; //将要放的物品告诉家长 a=50; //将物品放到某个抽屉中 计算机存储变量的过 ...
- arduino:int & double 转string 适合12864下使用
转自:http://www.geek-workshop.com/forum.php?mod=viewthread&tid=3383&highlight=12864 很多人在玩的时候,都 ...
随机推荐
- Spring源码之创建AOP代理之增强器的获取
前言 在上一篇博文中我们说到了通过自定义配置完成了对AnnotationAwareAspectJAutoProxyCreator类型的自动注册,那么这个类究竟做了什么工作从而完成AOP的操作呢?首先我 ...
- Snipaste屏幕截图的使用
什么是Snipaste Snipaste是一款屏幕截图软件 类似于微信的截图 Snipaste使用步骤 百度搜索Snipaste 如图 点击 根据自己电脑系统选择安装 下载完成后 解压到当前文件夹 点 ...
- opencv中的exp32f函数
exp32f opencv的exp函数和cmath的exp函数在精度上存在一定差异,通过查找源码,发现了这么一段实现.代码如下: 点击查看代码 #define EXPTAB_SCALE 6 #defi ...
- web全栈后台权限管理系统(VUE+ElementUi+nodeJs+koa2)
web全栈后台权限管理系统(VUE+ElementUi+nodeJs+koa2) 主要技术 前端 vue 全家桶 ElementUI 后端 Node.js Koa2 Mongoess 数据库 mong ...
- 更好的 java 重试框架 sisyphus 背后的故事
sisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活. 今天,让我们一起看一下西西弗斯背后的故事. 情景导入 简单的需求 产品经理:实现一个 ...
- HCNP Routing&Switching之BGP防环机制和路由聚合
前文我们了解了BGP路由宣告相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15440860.html:今天我们来聊一聊BGP防环机制和路由聚合相关话题 ...
- QQ消算轰炸,我好无聊真的
from pynput.keyboard import Key,Controller import time from random import choice time.sleep(5) # 创建键 ...
- [no code][scrum meeting] Alpha 12
项目 内容 会议时间 2020-04-19 会议主题 周总结会议 会议时长 45min 参会人员 全体成员 $( "#cnblogs_post_body" ).catalog() ...
- [BUAA]起点 软工第一次作业-热身
项目 内容 这个作业属于哪个课程 2020计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 第一次作业-热身! 我在这个课程的目标是 了解软件开发,提高自己的工程能力和团队协作能力 这个作业在哪 ...
- 热身训练4 Article
Article 在这个学期即将结束时,DRD开始写他的最后一篇文章. DRD使用著名的Macrohard的软件World来写他的文章. 不幸的是,这个软件相当不稳定,它总是崩溃. DRD需要在他的文章 ...