c++基本数据类型的介绍、一些常用windows数据类型介绍及转换

本文详细解析了C++中数据类型的字节对齐原则,如何计算不同类型的数据范围,以及常见C++数据类型的字节数。同时,深入探讨了Windows编程中的数据类型,包括字符串、16进制句柄转换等,帮助读者理解不同类型在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1> 怎么计算一个类型的范围?

  • 以前大学学的8086是16位的寄存器,现在32,64的都有了;那么现在看看数据类型单位是字节(8位)也是合理的,提高性能,便于字节对齐,提高内存访问效率。
    c++字节对齐
  • 现在知道了基本类型肯定都是8的倍数,而且从规定上看还都是偶数倍(除了它本身==),为什么呀?想一想,偶+偶=偶,奇+偶=奇,如果内存是按16位对齐的,只要有奇数倍,肯定会浪费,而且浪费的你还管不了;你把奇数倍加多,变偶数倍,这样就不会浪费了,而且相比奇数倍浪费的部分,现在都在我们掌控之中。(以上以下都是我个人看法~
  • 至于为什么没6倍的,都是1、2、4、8倍的,我觉得有2个原因:
    • 从数学上看,有了1,2,4,8可以得到1-15中的任何一个数,因此他们是可以作为基的。而且我们可以发现随着操作系统位数的增长,也只需要新加一下数据类型,打个比方,我们可以为128位操作系统创造一个BIG LONG:16字节,哈哈。
    • 程序员只认二进制,哈哈,这几个数能干的事,为啥还要加别的,程序员干的事不就是让世界变简单吗?哈哈~
  • 那怎么算数据的范围呢?
  • 首先,没有unsigned的数据类型就一定是有符号数,先算他有多少位
有无符号字节数位数范围
int432-2^31 ~ 2^31-1
unsigned int4320 ~ 2^32-1
  • 上面这个例子可以很好的说明,有符号数是正负个一半,因为有0,所以正数的最大是一半减1
  • 有符号,正负分一半;无符号,正:(大龙小龙蓝红buff)我都要,哈哈~

2> 常见的c++数据类型的字节数

  • 不同(位数)的机器,有些类型的结果可能不一样,可以用sizeof(int)、sizeof(long long)打印出来看一下。
  • 我的机器64位
数据类型字节数
bool1
(unsigned )(signed)char1
(unsigned)(signed)short int2
(unsigned)(signed) int4
float4
long long8
(unsigned)(signed)long int8
double8
long double16

类型修饰符:
signed
unsigned
short
long

  • 从上表我们可以看出signed、unsigned修饰过后,字节数不变,表示范围改变;short 修饰后字节数变小为一半,long变大为一倍。这4个修饰符都可以修饰int,部分也可以组合。

在标准中,并没有规定long一定要比int长,也没有规定short要比int短。
标准是这么说的:长整型至少和整型一样长,整型至少和短整型一样长。
这个的规则同样适用于浮点型long double至少和double一样长,double至少和float一样长。
至于如何实现要看编译器厂商.

3> 一些常见windows数据类型

引言
  • windows数据类型也是由这些基本类型再次包装改名而已,不应该被千奇百怪的名字吓到(曾经瑟瑟发抖)
windows编程常用的数据类型
数据类型对应的基本类型
HWNDHWND_*
wchar_t宽字符
LPSTR 、PSTRchar*
LPCSTR 、PCSTRconst char*
LPWSTR 、PWSTRwchar_t*
LPCWSTR、PCWSTRconst wchar_t*
  • 从上表可以看出来,LP和P为前缀定义的是一个东西
字符串16进制句柄转换成窗口句柄HWND
  • CString转换成窗口句柄HWND
	CString hwnd = _T("000107C2");
	TCHAR* offset;
	HWND appHandle = (HWND)wcstol(hwnd.GetBuffer(),&offset,16);
  • std::wstring转换成窗口句柄HWND
std::wstring s("000107C2");
TCHAR* offset;
HWND appHandle = (HWND)wcstol(hwnd.c_str(),&offset,16);//按16进制转
wchar_t* 转换成UINT64
wchar_t* str = _T("123344");
UINT64 num = _wcstoui64(str,NULL,10);//按10进制转
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值