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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liunan199481/article/details/82799091

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的数据类型就一定是有符号数,先算他有多少位
有无符号 字节数 位数 范围
int 4 32 -2^31 ~ 2^31-1
unsigned int 4 32 0 ~ 2^32-1
  • 上面这个例子可以很好的说明,有符号数是正负个一半,因为有0,所以正数的最大是一半减1
  • 有符号,正负分一半;无符号,正:(大龙小龙蓝红buff)我都要,哈哈~

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

  • 不同(位数)的机器,有些类型的结果可能不一样,可以用sizeof(int)、sizeof(long long)打印出来看一下。
  • 我的机器64位
数据类型 字节数
bool 1
(unsigned )(signed)char 1
(unsigned)(signed)short int 2
(unsigned)(signed) int 4
float 4
long long 8
(unsigned)(signed)long int 8
double 8
long double 16

类型修饰符:
signed
unsigned
short
long

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

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

3> 一些常见windows数据类型

引言

  • windows数据类型也是由这些基本类型再次包装改名而已,不应该被千奇百怪的名字吓到(曾经瑟瑟发抖)

windows编程常用的数据类型

数据类型 对应的基本类型
HWND HWND_*
wchar_t 宽字符
LPSTR 、PSTR char*
LPCSTR 、PCSTR const char*
LPWSTR 、PWSTR wchar_t*
LPCWSTR、PCWSTR const 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进制转

猜你喜欢

转载自blog.csdn.net/liunan199481/article/details/82799091