1. 在Win7 x64下编程产生的程序,可以是Win32(x86),可以是x64的,都能运行,在【任务管理器 -> 进程】页面上,Win32的程序会以*32标记;

2. 高版本的VC,如VS2008,若产生了x64的程序,实际上定义了宏【_WIN64】,_WIN64可以用来判断当前程序是编译在何版本上的一个有效标志。(注,无论在x86还是在x64平台上,_WIN32宏是一定被定义着的);

3. 使用64位的整数,在VC6下,可以使用__int64(前面两个下划线),占用8个字节,在高版本的VS下,既可以使用__int64,又可以使用long long来表达一个64位(其实内部实现还是__int64,见下面的typedef实现),支持基本的运算,如+、-、*、/等操作。

运算时特别小心,最好写这样的代码:

__int64 x = 10446744073709551615; //不要在这一行上做运算
x -= 100;
printf("%I64u\r\n", x);

4. printf输出或格式化(CString.Format)时,使用下面方式:

printf("%I64d"),其中“I64”是修饰符号,后面的d是有符号的64位显示;类似的如“%I64x”,以16进制显示该整数,“%016I64x”,以16进制前面补零共16个占位符的方式显示该整数;“%I64u”是无符号的10进制显示。

反过来,将一个64位的整数字符串转换为数值,使用_strtoui64,该函数还支持16进制的字符串转换:

char str[100] = "10446744073709551615";
unsigned __int64 u =_strtoui64(str, NULL, 10);
printf("10进制的字符串转换结果:\r\n");
printf( "u = %I64u\n", u );
printf( "u = 0x%I64x\n\n", u );printf("16进制的字符串转换结果:\r\n");
strcpy(str, "0x90fa4a62c4dfffff");
u =_strtoui64(str, NULL, 16);
printf( "u = %I64u\n", u );
printf( "u = 0x%I64x\n\n", u );

5. 64位编程还经常用到的一个数据联合结构:LARGE_INTEGER,经常用在驱动编程中,定义如下:

typedef union _LARGE_INTEGER {struct {DWORD LowPart;LONG HighPart;} ;struct {DWORD LowPart;LONG HighPart;} u;LONGLONG QuadPart;
}LARGE_INTEGER, *PLARGE_INTEGER;

直接使用成员QuadPart,像上面说的一样使用即可,因为Windows的头文件中这样定义的:typedef __int64             LONGLONG;(__int64的前面是两个下划线)

类似的64位数据类型:

typedef __int64             LONG64;
typedef signed __int64      INT64;
typedef unsigned __int64    ULONGLONG;
typedef unsigned __int64    DWORDLONG;
typedef unsigned __int64    ULONG64;
typedef unsigned __int64    DWORD64;
typedef unsigned __int64    UINT64;

6. 在64位编译环境下,指针类型占用8字节:

#ifdef _WIN64printf("64位版本\r\n");printf("DWORD64 = %d\r\n", sizeof(DWORD64));   //8printf("HANDLE  = %d\r\n", sizeof(HANDLE ));  //8printf("LONGLONG = %d\r\n", sizeof(LONGLONG));    //8printf("char * = %d\r\n", sizeof(char *));        //8printf("LARGE_INTEGER = %d\r\n", sizeof(LARGE_INTEGER));      //8
#else printf("32位版本\r\n");printf("DWORD64 = %d\r\n", sizeof(DWORD64)); //8printf("HANDLE  = %d\r\n", sizeof(HANDLE ));  //4printf("LONGLONG = %d\r\n", sizeof(LONGLONG));    //8printf("char * = %d\r\n", sizeof(char *));        //4printf("LARGE_INTEGER = %d\r\n", sizeof(LARGE_INTEGER));      //8
#endif

小结:无论是在x86,还是在x64上,最快最简单的办法是直接使用__int64类型来表达64位的数据。



VC(VS)的64位编程小结相关推荐

  1. 32位架构应用转64位架构小结

    64位应用适配 ##简介 同桌面系统架构一样,苹果公司从 iOS 7 开始采用64位的A7处理器.在相同的设备上,运行相同的应用,支持64位的应用比支持32位的应用性能更高. 苹果公司的A7处理器支持 ...

  2. vc++l调用64位的mysql_VC++2010配置使用MySQL5.6

    0.前提 安装后的文件概览 编译器:  VC++2010 MySQL版本:MySQL5.6.19 for win64 Connector版本:connector  c++  1.1.3 在VS2010 ...

  3. win32,win64编程永恒;语言编程需要注意的64位

    win32,win64编程永恒;语言编程需要注意的64位和32机器的区别 作者:拳拳的Blog | 出处:博客园 | 2011/12/10 7:17:51 | 阅读 79次 一.数据类型特别是int相 ...

  4. 【转】将 Linux 应用程序移植到 64 位系统上

    原文网址:http://www.ibm.com/developerworks/cn/linux/l-port64.html 随着 64 位体系结构的普及,针对 64 位系统准备好您的 Linux® 软 ...

  5. 64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考

    最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的 ...

  6. 64位进程调用32位dll的解决方法

    最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的 ...

  7. linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])

    linux 64位内存空间大小?(linux 64 bits memory space size? [closed]) 在Linux 32bit中,内核占用1GB的内存,而用户空间将占用剩余的gigs ...

  8. 32位和64位系统对于程序员的影响

    win32,win64编程永恒;语言编程需要注意的64位和32机器的区别 一.数据类型特别是int相关的类型在不同位数机器的平台下长度不同.C99标准并不规定具体数据类型的长度大小,只规定级别.作下比 ...

  9. 64位和32位有什么区别?到底哪个更快?——硬核科普

    原文链接:联想商用服务----64位和32位有什么区别?到底哪个更快?--硬核科普 32位和64位到底指什么? 下载 Windows 操作系统,会区分 X 64 和 X 86 版本(一般 X 86 是 ...

最新文章

  1. 浅谈 Kubernetes 中的服务发现
  2. 计算机系统的分类与发展方向
  3. 6个座位办公室最佳位置_一天中6个最佳的护肤时间,你知道几个?
  4. [BOI2007] Mokia
  5. Verizon部署美国最大小型基站系统
  6. mnist数据集读取并保存为Numpy数组
  7. Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出...
  8. solve stiffness matrix in matlab
  9. 相机标定-opencv
  10. 帆软自定义登录html,自定义登陆界面- FineReport帮助文档|报表开发|报表使用|学习教程...
  11. 迅雷边下边看实现过程分析
  12. java 发微信视频_分享java微信开发视频
  13. c++构造函数的定义
  14. 离职半年了,老东家又发 offer,回不回?
  15. 国庆假期看了一系列图像分割Unet、DeepLabv3+改进期刊论文,总结了一些改进创新的技巧
  16. oracle wallet相关的bug|oracle wallet使用注意事项|ORA-28374: typed master key not found in wa
  17. strtok和strtok_s函数使用说明
  18. 帝国时代2决定版多人游戏服务器维护,帝国时代2决定版联机网络差解决办法
  19. C++: 计算累积密度函数 (CDF) 非中心Beta分布(附完整源码)
  20. 关于新版微信内核x5问题

热门文章

  1. MATLAB及工具箱计算特点汇总及图形工作站配置探讨202007
  2. 16 个超级实用的 Java 工具类
  3. 单片机双机通信c语言实验心得,双机通讯实验报告
  4. iOS 适配全面屏iPhone X系列手机-Swift版
  5. D900 终于用上了几近完美的 ROM
  6. 集成项目管理交付清单
  7. STM32数据存储学习
  8. 壳浏览器 android,搭建Android浏览器壳子
  9. linux内核链接脚本vmlinux.lds分析(十一)
  10. intellij idea下使用复制粘贴键没法用了,失效