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 很多人在玩的时候,都 ...
随机推荐
- Java 爬取 51job 数据 WebMagic实现
Java 爬取 51job 数据 一.项目Maven环境配置 相关依赖 jar 包配置 <parent> <groupId>org.springframework.boot&l ...
- netty 处理客户端连接
Netty如何处理连接事件 上文讲了Netty如何绑定端口,现在我们来阅读下netty如何处理connect事件.上文我们说了NioEventLoop启动后不断去调用select的事件,当客户端连接时 ...
- HCNP Routing&Switching之BGP报文结构、类型和状态
前文我们了解了BGP的邻居建立条件.优化以及BGP认证相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15395723.html:今天我们来聊一聊BGP ...
- SpringCloud 2020.0.4 系列之 Feign
1. 概述 老话说的好:任何问题都有不止一种的解决方法,当前的问题没有解决,只是还没有发现解决方法,而并不是无解. 言归正传,之前我们聊了 SpringCloud 的服务治理组件 Eureka,今天我 ...
- UltraSoft - Beta - Scrum Meeting 12
Date: May 28th, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 会议记录修复了课程中心导入作业时出现重复的问题完成了消息中心界面的交互 Liuzh ...
- 计算机网络之网络层移动IP
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105319753 学习课程:<2019王道考研计算机网络> 学习目的 ...
- Matlab+Qt开发笔记(一):matlab搭建Qt开发matlib环境以及Demo测试
前言 做一些数据处理软件,使用matlab文件,.mat文件. 准备条件 安装matlab2016,发现是vs 12(是vs2011版本),Qt5.9.3是支持vs 14(是vs2015版 ...
- Ubuntu14.04安装ia32-libs报错
安装编译环境的时候报错 sudo apt-get install ia32-libs Reading package lists... Done Building dependency tree Re ...
- Bzoj P2212 [Poi2011]Tree Rotations | 线段树合并
题目链接 通过观察与思考,我们可以发现,交换一个结点的两棵子树,只对这两棵子树内的节点的逆序对个数有影响,对这两棵子树以外的节点是没有影响的.嗯,然后呢?(っ•̀ω•́)っ 然后,我们就可以对于每一个 ...
- Zabbix webhook 自定义报警媒介
场景一:使用企业微信机器人报警 图中的token是:在群组中添加机器人,机器人的webhook地址的key var Wechat = { token: null, to: null, message: ...