问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C++基本数据类型长度到底是多少?

发布网友 发布时间:2022-04-26 19:00

我来回答

5个回答

热心网友 时间:2023-10-22 10:45

  C++标准只规定int至少是16位,而且不比short int短,对具体是多少位没做要求,取决于编译器怎么实现。事实上,C++对所有算术类型的具体长度都没做要求。
  不过在目前大多数机器上,大多数编译器都将int实现为32位。

热心网友 时间:2023-10-22 10:46

“一个long至少和一个int一样大”是保证不会出现int占64位,long占32位的情况……喜欢用固定宽度整型的话去用 int32_t、int64_t 就是了,何必直接用基本类型

热心网友 时间:2023-10-22 10:46

因为在过去16位时代一个int对应一个地址长度
后来进入32位时代int类型自燃生长为32位了
64位时由于大部分人习惯int为32位了所以依旧保持32位

因为c语言与地层相关,受硬件影响很大

热心网友 时间:2023-10-22 10:47

现在编译器基本都是32位编译器,short16位几乎不怎么用,int和long都是32位,long long是64位,不用怀疑

热心网友 时间:2023-10-22 10:47

标识符 类型说明 长度
(字节) 范围 备注
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位有效位
 一个指针本身占用4个字节
unsigned 用于修饰 int 和 char 类型。它使int 或 char 类型成为无符号类型。
signed 是 unsigned 反义词,如 signed int 表示有符号类型,不过signed可以省略,所以上面列出char,short int,int 都是有符号类型。
 
有 short int (短整型) ,所以也就有对应 long int (长整型)。long int 用于表示4个字节(32位)的整数。但是在我们现在普通使用的32位计算机中,int 默认就是4个字节,所以long也是可以省略的。
(较早几年,也就是Windows 3.1/DOS 流行的时候,那时的机器及操作系统都是16位的,这种情况下,int 默认是16位的。此时,如果想实现32位整数,就必须定义为这样的类型:long int)。
在浮点数方面,我们最常用的将是 double。它的精度适合于我们日常中的各种运算。当然,float的精度也在很多情况下也是符合要求的。
布尔型(bool)和无类型(void)
除字符型,整型,实型以外,布尔型和无类型也是较常用的两种数据类型。
 布尔型(bool)
布尔类型是C++的内容,C语言没有这一类型。
布尔类型的数据只有两种值:true(真) 或 false(假)。
什么时候使用布尔型呢?
履历表中一般有“婚否”这一项,婚否这种数据就适于用真或假来表示。性别男女,有时也会用布尔值表示,(一般程序都不约而同地把男性设置“真”,女性设置为“假”。)
 无类型(void)
这个类型比较怪“无”类型。是的,没有类型的类型。或者我们这样认为比较好接受:在不需要明确指定类型的时候,我们可能使用 void 来表示。
=========================================================================================
=========================================================================================
=========================================================================================
Visual C++常用数据类型转换详解
本文将介绍一些常用数据类型的使用。

我们先定义一些常见类型变量借以说明

int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]="女侠程佩君";
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;

一、其它数据类型转换为字符串

短整型(int)
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2); ///按二进制方式转换
长整型(long)
ltoa(l,temp,10);

二、从其它包含字符串的变量中获取指向该字符串的指针

CString变量
str = "2008北京奥运";
buf = (LPSTR)(LPCTSTR)str;
BSTR类型的_variant_t变量
v1 = (_bstr_t)"程序员";
buf = _com_util::ConvertBSTRToString((_bstr_t)v1);

三、字符串转换为其它数据类型
strcpy(temp,"123");

短整型(int)
i = atoi(temp);
长整型(long)
l = atol(temp);
浮点(double)
d = atof(temp);

四、其它数据类型转换到CString
使用CString的成员函数Format来转换,例如:

整数(int)
str.Format("%d",i);
浮点数(float)
str.Format("%f",i);
字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值
str = username;

五、BSTR、_bstr_t与CComBSTR

CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。
char *转换到BSTR可以这样: BSTR b=_com_util::ConvertStringToBSTR("数据");///使用前需要加上头文件comutil.h
反之可以使用char *p=_com_util::ConvertBSTRToString(b);

六、VARIANT 、_variant_t 与 COleVariant

VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。
对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:
VARIANT va;
int a=2001;
va.vt=VT_I4;///指明整型数据
va.lVal=a; ///赋值

对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:

unsigned char bVal; VT_UI1
short iVal; VT_I2
long lVal; VT_I4
float fltVal; VT_R4
double dblVal; VT_R8
VARIANT_BOOL boolVal; VT_BOOL
SCODE scode; VT_ERROR
CY cyVal; VT_CY
DATE date; VT_DATE
BSTR bstrVal; VT_BSTR
IUnknown FAR* punkVal; VT_UNKNOWN
IDispatch FAR* pdispVal; VT_DISPATCH
SAFEARRAY FAR* parray; VT_ARRAY|*
unsigned char FAR* pbVal; VT_BYREF|VT_UI1
short FAR* piVal; VT_BYREF|VT_I2
long FAR* plVal; VT_BYREF|VT_I4
float FAR* pfltVal; VT_BYREF|VT_R4
double FAR* pdblVal; VT_BYREF|VT_R8
VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL
SCODE FAR* pscode; VT_BYREF|VT_ERROR
CY FAR* pcyVal; VT_BYREF|VT_CY
DATE FAR* pdate; VT_BYREF|VT_DATE
BSTR FAR* pbstrVal; VT_BYREF|VT_BSTR
IUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWN
IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH
SAFEARRAY FAR* FAR* pparray; VT_ARRAY|*
VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANT
void FAR* byref; VT_BYREF

_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
例如:
long l=222;
ing i=100;
_variant_t lVal(l);
lVal = (long)i;

COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:
COleVariant v3 = "字符串", v4 = (long)1999;
CString str =(BSTR)v3.pbstrVal;
long i = v4.lVal;

七、其它

对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如:
LPARAM lParam;
WORD loValue = LOWORD(lParam);///取低16位
WORD hiValue = HIWORD(lParam);///取高16位
对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如:
WORD wValue;
BYTE loValue = LOBYTE(wValue);///取低8位
BYTE hiValue = HIBYTE(wValue);///取高8位
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么有世界三大男高音,而没有人是世界三大最高男音? 各位,请教一个问题。给一个初次见面的朋友用日文怎么写信? 男友不好意思夸我,怎么办? 结婚不发朋友圈 2023年哈尔滨12月一般多少度-12月份去哈尔滨穿什么合适 《狱中联欢》教案 狱中联欢、赤壁之战、田忌赛马、一夜的工作、石灰吟按时间的先后顺序排... 狱中联欢是按照——顺序来记叙的?文中详写的是——略写的是—— 如何对待轻视你的人? 看透身边这七种人,提升自己格局和认知 户外卡式炉气罐用完怎么换气 1、C语言中的基本数据类型有哪几种,分别占几个字节,写出对应的类型标识符并作? 谷岩卡式炉气通用吗 冬天卡式炉气罐怕冻吗 卡式炉气罐可以装到铁盒里吗 汇编语言的基本数据类型 网络钓鱼的主要伎俩 网络钓鱼是什么? 急求1000字水浒传人物传记 求水浒传人物传记,不少于600字!拜托了! 水浒传人物小传 15个水浒传人物传记 请帮我写30个『水浒传』中的人物小传啊 《水浒传》人物传记 水浒传中20个典型人物和人物小传 水浒传10个人物传记每个300.100字评价 水浒传人物列表 水浒传6篇主要人物传记 水浒传人物传记10个100字 水浒传中10个主要人物传记(400字左右) 卡式炉气罐220与250通用吗 请问java中的基本数据类型中的字节型( byte ) 是什么概念,请列举几个byte型的常量,谢! 卡式气户外卡式炉气罐液化一罐能用多久 生猪肉.生鸡肉.生鱼肉放冰箱能保存多久 买房全款办不动产证以后取房本还要缴大修基金 徐组的词 用徐组四字成语意思是慢慢的有哪些? 樊桐舟和黑鸭子是什么关系 唐茜靖是王徐组的吗 黑鸭子演唱组合的黑鸭子现状 西安西咸新区泾河新城永乐北流村西徐组拆迁吗? 请问华硕b365主板bios中组的硬盘RAID模式阵列怎么恢复解除? 黑鸭子组合的成员现在都是谁? 黑鸭子是哪几个人呀? 盖层综合评价 池州市桂畈村坂徐组什么时候能修路呢? 南京长青龙虾养殖专业合作社怎么样? 玻璃与玻璃的密封可以采用什么方法 玻璃与玻璃的密封可以采用什么方法? 磨砂玻璃密封效果怎么样 磨砂玻璃密封的3大优点