机器字长:计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度

想深入了解. 学好汇编语言对你帮助非常大.

汇编语言中的,最基本的数据类型有: (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位数据。但也要看操作系统和编译器的支持度。
机器字长:是指计算机进行一次整数运算所能处理的二进制数据的位数(整数运算即定点整数运算)。机器字长也就是运算器进行定点数运算的字长,通常也是CPU内部数据通路的宽度。现在一般为32位即4个字节,也有64位和16位的。

算术类型的存储空间按照机器而定。一般,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

EMT64本质上和AMD64一样都是IA-32的增强版本,Xeon借助于EM64T可实现高达1TB(40bit)的物理内存寻址和256TB(48bit)的虚拟内存寻址,并且良好地支持现有32位x86代码的执行,这一点跟AMD64无异,同时也是Intel开发EM64T的出发点—让现有的x86指令集能够执行64位代码,而继续保持对32位代码的良好兼容。但由于多方面的限制,无论是EM64T还是AMD64均只能实现比32位指令集更大内存空间的寻址,而无法真正做到纯64位指令集的1PB(50bit)和16EB(64bit)的物理内存和虚拟内存寻址(IA-64就能做到这一点),其关键在于EM64T和AMD64本质上仍是基于32位的x86指令集,只是Intel和AMD分别采用不同的技术手段对x86指令集进行扩展,从而实现对64位的支持
  在C++Primer第四版中介绍数据类型时,30页有一张表,里面包括了各种数据的字长,其中int的字长是16位,这一点一直困惑我。后来 发现上面的标题是“最小存储空间”。细心的同学可以看到31页有介绍,“一般short类型为半个及其子长,int类型为一个机器字长,而long为一个 或两个机器字长(在32为机器中int类型和龙类型通常字长是相同的)。”而我们通常用的机器都是32位的,所以int是4字节,long也是4字节。

以下内容引自别人的博客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与机器字长的更多相关文章

  1. int 占一个机器字长

    int与short int是不一样的. C++标准规定,int占一个机器字长.在32位系统中int占32位,也就是4个字节, 而在老式的16位系统中,int占16位,即2个字节. 而C++标准中只限制 ...

  2. CPU位数、操作系统位数、机器字长、C/C++基本数据类型长度

    1.CPU位数=CPU中寄存器的位数=CPU能够一次并行处理的数据宽度(位数)=数据总线宽度: //现在的计算机处理器一般都是64位,这是硬件的事. 2.CPU为了实现其功能设计了指令集,即是CPU的 ...

  3. C# 判断字符串是否是int/double

    using System.Text.RegularExpressions; /// <summary> /// 判断字符串是否是int/double /// </summary> ...

  4. .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 ...

  5. 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 ...

  6. string 与 int double 的转化

    #include <iostream> #include <string> #include <sstream> using namespace std; int ...

  7. 用C#.NET调用Java开发的WebService传递int,double问题

    用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和D ...

  8. int/double/string使用

    在计算机中存储数据和儿童在抽屉中存放物品很类似. 例如: 要在计算机中存一个数字50,需要两句话. int a;  //将要放的物品告诉家长 a=50;  //将物品放到某个抽屉中 计算机存储变量的过 ...

  9. arduino:int & double 转string 适合12864下使用

    转自:http://www.geek-workshop.com/forum.php?mod=viewthread&tid=3383&highlight=12864 很多人在玩的时候,都 ...

随机推荐

  1. pdb的插拔测试

    pdb的插拔测试:将pdb从一个cdb中,插拔到另一个cdb中. 源端pdb unplug SQL> select instance_name from v$instance; INSTANCE ...

  2. Jmeter使用问题记录

    Jmeter下载安装,设置中文,返回值乱码处理,下载接口测试 下载地址 解压后,在Jmeter的bin文件夹下启动 修改默认启动为中文简体:打开bin目录下的jmeter.properties文件,在 ...

  3. Serverless 架构下的服务优雅下线实践

    作者 | 行松 阿里巴巴云原生团队 应用发布.服务升级一直是一个让开发和运维同学既兴奋又担心的事情. 兴奋的是有新功能上线,自己的产品可以对用户提供更多的能力和价值:担心的是上线的过程会不会出现意外情 ...

  4. TCP服务器和客户端_Socket编程

    TCP服务器 服务器启动文件 1 import java.io.IOException; 2 import java.net.ServerSocket; 3 import java.net.Socke ...

  5. 苹果的最新MacbookPro,炸到你了么?

    一 苹果秋季发布会如期而至.我不是一个标准的果粉.但是我今年用上了macbook pro m1,最期待的就是新款的搭载了M1X的Macbook. 苹果官方也放出了要炸翻全场的宣传语... 这次发布会围 ...

  6. 《JavaScript DOM编程艺术》:+= 相加之后再赋值

    第2章  第20页 += var year = 2010; var message = "The year is"; message += year; message += yea ...

  7. 【数据结构与算法Python版学习笔记】图——基本概念及相关术语

    概念 图Graph是比树更为一般的结构, 也是由节点和边构成 实际上树是一种具有特殊性质的图 图可以用来表示现实世界中很多有意思的事物,包括道路系统.城市之间的航班.互联网的连接,甚至是计算机专业的一 ...

  8. 软件案例分析——VS和VS Code

    软件案例分析--VS和VS Code 项目 内容 这个作业属于哪个课程/ 2020年春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里? 软件案例分析 我在这个课程的目标是? 提高代码水平,熟 ...

  9. BUAA_2020_软件工程_结对项目作业

    项目 内容 这个作业属于哪个课程 班级博客 这个作业的要求在哪里 作业要求 我在这个课程的目标是 掌握软件工程的思路方法 这个作业在哪个具体方面帮助我实现目标 学习结对编程 教学班级 006 项目地址 ...

  10. 对mongo文档的增删改操作

    在mongo db 中增加.删除.修改文档有好多方法,这里简单记录一下我所知道的一些方法. 前置条件: 1.创建study数据库  use study; 2.创建persons集合,当第一次向pers ...