常用数据类型对应字节数,int长度
常用数据类型对应字节数:

这两台机器,前者32位,后者64位,测试了以下数据类型的长度: 前者: ,, 后者: ,, 不是说int会变吗,为何变得是long? 还有如果要写个通用的程序,订死必须用4个或8个字节的数据类型,在不需要重新编码编译的前提下,该如何处理这种变化? 谢谢指教。。 2楼 发表于 -- : QUOTE: 原帖由 maxxfire 于 -- : 发表 这两台机器,前者32位,后者64位,测试了以下数据类型的长度: 前者: ,, 后者: ,, 不是说int会变吗,为何变得是long? 还有如果要写个通用的程序,订 ... 回答: 在16bit系统中sizeof(; 在有的64bit系统中的确有sizeof(int)=8的情况,跟机器字长和编译器都有关. 要写个通用的程序,订死必须用4个或8个字节的数据类型,在不需要重新编码编译的前提下,该如何处理这种变化?" 用long long 吧,相对好一些,但其它代码不需要重新编译是比较困难的! 使用int32_t,int64_t,int16_t等类型,在头文件<stdint.h>中定义的 ================================= 两台机器,前者32位,后者64位,测试了以下数据类型的长度: 前者: ,, 后者: ,, 不是说int会变吗,为何变得是long? The common programming model -bit Unix stystems bits. The model that -bit Unix systems bits. 至于还有如果要写个通用的程序,订死必须用4个或8个字节的数据类型,在不需要重新编码编译的前提下,该如何处理这种变化? 赞同楼上的观点 不过楼主要求不重新编译是不行的吧
|
Iso/ansi本身并不规定内部数据类型的长度(原因简单,如果他们这样做了,现存的大部分代码都不可用了, 所以标准委员会把定义数据类型的任务交给编译器的研发者) 数据类型的长度的是由编译器和CPU共同决定的, 最近调试一个程序,吃了数据长度的亏。数据长度对程序的移植性至关重要。这里对C的基本数据类型长度以及与编译器和CPU的关系做个总结。 一 数据长度的陷阱 Char, short,int,long这些数据类型的长度在不同的机器上不同的,不仅是数据长度,不同的编译器对这些数据类型的符号定义也是不同的。比如,在有些编译器,char默认是有符号的,有些编译器把char当成是无符号的。在嵌入式软件中,可移植性异常重要,所以MISRA(汽车工业软件可靠性联合会)就建议使用这些数据类型时,前面一定要有signed或unsigned 修饰,明确说明该数据类型的符号. 用代码举个例子 char ch; ch = 0xff; if(ch == 0xff)…… 学过C的人都应该知道C 的隐式类型转换规则,运算的两个数据类型如果不同,低级的往高级的转换。在本例中,ch 是 char 类型,是低级的,0xff是整型,高级. 在if语句中,ch要转化为整型的。转换的动作就是填充符号位,如果是无符号数就填充0. 所以本例中,如果ch 为无符号数,扩展后ch = 0x00ff(假设整型是16位), if语句成立. 但是如果ch 是有符号的,扩展后 ch = 0xffff, if 语句是不会成立的. 另外要注意逻辑操作符以及左移,右移操作符不支持这种隐式类型转换规则. 现在假设我们认为char 是8位(大部分机器上它都是这样的), 那么signed char 的范围应该是-127~127, unsigned char 的范围应该是0~255. ANSI/ISO 是这样写的。写到这里,可能就有人会有疑问了,因为我们可能看到有些书上写有符号的char 的范围是-128~127. 这是说它的补码表示. 其实ANSI/ISO并未规定有符号数用补码表示,所以在如果查一下ANSI/ISO标准会发现它确实有符号的char 是-127~127. 但是现实情况是几乎所有的机器都是用补码来表示有符号数, 正数的补码是它本身,整负数的补码是除符号位外各位取反加1, 最小的负数(signed char)的在计算机里表示为0x80, 把它取补得到它的原码就是-128. 二 常用编译器支持的数据类型 C内部的基本数据类型是没有可移植性而言的,不同的机器上,不同的编译器数据长度的大小是不一样的。ISO建议程序员在编写要移植的代码时,不要直接用基本的数据类型,而是用typedef 去重新定义。这样在移植程序的时候只要改动小部分代码就可以了。但是typedef的前提是你对编译环境所支持的数据类型有清楚的认识。去网上找了一下, 还没有一个对目前主流编译器支持的数据类型长度的总结,于是就查了一些资料,这里做一个总结(当然不是全部了,只是列举了我用过的)
|
一、程序运行平台
不同的平台上对不同数据类型分配的字节数是不同的。
个人对平台的理解是CPU+OS+Compiler,是因为:
、64位机器也可以装32位系统(x64装XP);
、32位机器上可以有16/32位的编译器(XP上有tc是16位的,其他常见的是32位的);
、即使是32位的编译器也可以弄出64位的integer来(int64)。
以上这些是基于常见的wintel平台,加上我们可能很少机会接触的其它平台(其它的CPU和OS),所以个人认为所谓平台的概念是三者的组合。
虽然三者的长度可以不一样,但显然相互配合(即长度相等,32位的CPU+32位的OS+32位的Compiler)发挥的能量最大。
理论上来讲 我觉得数据类型的字节数应该是由CPU决定的,但是实际上主要由编译器决定(占多少位由编译器在编译期间说了算)。
二、常用数据类型对应字节数
可用如sizeof(char),sizeof(char*)等得出
32位编译器:
char :1个字节
, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器:
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
常用数据类型对应字节数,int长度的更多相关文章
- Mysql 常用数据类型 占用字节数 [转]
数据类型是定义列中可以存储什么数据以及该数据实际怎么存储的基本规则.Mysql的常用数据类型主要有: 串数据类型:最常用的数据类型,有两种基本的串类型:分别为定长串和不定长串.定长串结束长度固定的字符 ...
- 数据类型对应字节数(32位,64位 int 占字节数)
数据类型对应字节数(32位,64位 int 占字节数) 可用如sizeof(char),sizeof(char*)等得出 32位编译器: char :1个字节 char*(即指针变量): 4个字节(3 ...
- C语言在32位和64位机器下数字数据类型的字节数取决于编译器和平台, 主要由编译器决定。
C语言中数字数据类型的字节数 C声明 32位机器 64位机器 char 1 1 short int 2 2 int 4 4 //整型在32位和64位下都是4个字节 long int 4 8 l ...
- Mac OS X和iOS上基本数据类型的字节数
在Mac和IPhone上分别运行下面的程序: NSLog(@"char size = %lu", sizeof(char)); NSLog(@"short int siz ...
- Java字符串中常用字符占用字节数
java中一个char型的数据(也就是一个字符)占两个字节.而Java中常用的字符包括数字.英文字母.英文符号.中文汉字.中文符号等,若在字符串中包含里面的多种字符,它们是否都占两个字符呢?答案是否定 ...
- java中各种数据类型占用字节数
1字节(Byte)=8bit java的基本类型 类型 所占字节 byte 1 short 2 int 4 long 8 float 4 double 8 char 2 String中字母和汉字所占字 ...
- C++基本数据类型占字节数
32位编译器 char :1个字节char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节.同理64位编译器)short int : 2个字节int: 4个 ...
- c语言中,常见数据类型的字节数
一直记不住这个,特意mark下来 和机器字长及编译器有关系: 所以,int,long int,short int的宽度都可能随编译器而异.但有几条铁定的原则(ANSI/ISO制订的): 1 size ...
- C语言中数据类型的字节数
类型 16位 32 位 64位 char 1 1 1 short int 2 2 2 int 2 4 4 unsigned int 2 4 4 float 4 4 4 double 8 8 8 lon ...
随机推荐
- centos6编译安装zabbix3.0和中文支持整理文档
编者按: 最近公司部分业务迁移机房,为了更方便的监控管理主机资源,决定上线zabbix监控平台.运维人员使用2.4版本的进行部署,个人在业余时间尝鲜,使用zabbix3.0进行部署,整理文档如下,仅供 ...
- UESTC - 594 我要长高
他们oj挂掉啦, 我先保存一下代码... 直接dp复杂度, n * 100 * 100, 我们可以将前一个人的信息丢进单调队列中去,可以优化成n * 100; #include<bits/std ...
- PHP 统计数据合并
将不同的统计结果整合在一起,如图,根据年级统计出不同成绩段人数(此处只为举例),然后写了一个方法来处理这些统计数组 <?php /** * 合并统计数据 * @param $key_column ...
- jdk与eclipse不匹配的各种问题。。。
- 关于JavaScript变量提升
请看如下代码: console.log(a); var a = 2; 输入结果会是什么? 请说出理由 可能会有三种答案: 1.2 2.抛出ReferenceError异常 3.undifined 对 ...
- 全文搜索引擎 Elasticsearch (二) 使用场景
1.场景—:使用Elasticsearch作为主要的后端 传统项目中,搜索引擎是部署在成熟的数据存储的顶部,以提供快速且相关的搜索能力.这是因为早期的搜索引擎不能提供耐用的存储或其他经常需要的功能 ...
- V-by-one
一:v-by-one技术产生背景 LVDS已经在业界盛行多年,近来电视解析度和播放格式的进展已经导致频宽需求大幅增加,具有60Hz和120Hz甚至240Hz更新频率的电视已经在商店内 贩售.2 ...
- IDEA导入eclipse项目并部署运行完整步骤(转发)
首先说明一下:idea里的project相当于eclipse里的workspace,而idea里的modules相当于eclipse里的project 1.File-->Import Proje ...
- opencv 掩膜操作 滤波 卷积核定义 增强对比度 掩膜运算
/* 矩阵的掩膜操作 0 掩膜mask 在这里进行增强对比度: [ [ 0,-1, 0 ], [-1, 5, -1], [ 0,-1, 0 ] ] 使用mask滑动图片每一个位置,进行卷积运算 这里这 ...
- [CC-CHEFINV]Chef and Swaps
[CC-CHEFINV]Chef and Swaps 题目大意: 长度为\(n(n\le2\times10^5)\)的数列,\(q(q\le2\times10^5)\)次询问,每次问交换\(A_x\) ...