int64_t 与 uint64_t

  C的标准只规定特定数据类型需要实现的最小长度,特定类型的具体长度取决于编译器实现。为了增强程序的可移植性,C99标准增加了对固定长度的整数类型的支持。

  对固定长度类型的定义位于头文件 stdint.h 中。其中包括固定长度有符号整数类型 intN_t 和固定长度无符号整数类型 uintN_t,分别表示固定占用 N bits长度的整数类型( N = 8、16、32、64)。

  图示为CodeBlock13.12中头文件 stdint.h 对 int64_t 和 uint64_t 的定义,可以看到它们是通过对 long long 和 unsigned long long 的 typedef 声明实现的。  

 

  

相应格式字符串

  对于定义在头文件 stdint.h 中的类型 ,其printf和scanf的格式字符串在头文件 inttypes.h 中实现。

printf输出

  对于printf使用的格式化标识符,一般格式为 PRI + format + type 。其中 format规定输出的格式,可以为 d( decimal ,十进制) 、h( hexadecimal ,十六进制) 、o( octal , 八进制)、u( unsigned ,无符号)等,type 为对应的数据类型,可以为 N 。( 实际type还可以为FASTN、LEASTN、PTR 和 MAX等,具体可见 C data types - Wikipedia )

  如对于int64_t数据类型的输出,可以使用格式标志符 PRId64。

  

  实际上,各个格式化标志符的定义在头文件inttypes.h中。可以看到,实际可直接使用格式化标志符%I64d来输出 uint64_t类型。

  

  这也从解释了为什么需要将 PRIu64 独立书写,这是由于使用格式化字符串" %PRIu64 "时,编译器会将 " " 间的所有字符均视为字符串的一部分,这样在预处理阶段便无法对 PRIu64 的宏定义进行替换。将PRIu64独立出来后,其会在预编译阶段被替换为" I64u " (注意这里替换的结果包含引号),即格式化字符串变为 " % " " I64u " "\n",在C语言中被当作“ %I64u\n”处理,从而保证结果正确输出。

scanf输入

  对应的scanf使用的格式化标识符,一般格式为 SCN + format + type。其中 format规定输出的格式,可以为 d( decimal ,十进制) 、h( hexadecimal ,十六进制) 、o( octal , 八进制)、u( unsigned ,无符号)等,type 为对应的数据类型,可以为 N 。

  scanf的格式化标志符与printf中的定义方法大致相同,在头文件 inttypes.h 中存在相应的宏定义,如对无符号类型的输入的标识符如下图所示。

  

unsigned long long 与 long long 类型的输入与输出

  在CodeBlocks的头文件 stdint.h 中存在如下表述:

  

   

  一般而言C语言标准给出的 unsgned long long 与 long long 的格式化标识符分别为 llu 与 lli,但实在Windows环境下编译时,可能尚未提供对 " ll " 格式化标志符的支持,使得使用了以上两种格式化标识符的类型无法被正确识别。一种可行的解决方法是使用上述 int64_t 与 uint64_t 的格式化标识符,因为从头文件 stdint.h 的定义中我们可以发现,int64_t 与 uint64_t 分别就是 long long 与 unsigned long long 的 typedef 定义,故而可以使用 PRId64 和 PRIu64 来对 long long 类型与 unsigned long long 类型进行输出。

  需要注意的是,不同的机器和编译器对 int64_t 和 uint64_t 的实现可能并不相同,故而最好先在头文件 stdint.h 中确认具体的定义后再根据具体的定义使用对应的格式化标识符。

其他

  在程序设计时需要注意常数的类型问题,笔者在书写简单的测试程序时,使用如下方式,编译器报错"warning: left shift count >= width of type",即左移的长度大于了类型长度。

  

  这是由于C对常数的类型确认机制决定的。整数类型常量由其值和符号共同决定。其中十进制常量的类型是 int 、 long 和 long long 中能够容纳该常量的最小长度类型。故而上例中 1 被确认为 int 类型,长度在本机器上为 32bits,故而在进行编译时会出现错误。相应的,八进制和十六进制常量的类型是能容纳其值的 int 、unsigned int  、long 、unsigned long 、long long 和 unsigned long long 中长度最小的类型。这里可以看到,十进制常量均为有符号类型,而八进制和十进制常量的类型有可能为无符号类型。

【无标题】int64_t 与 uint64_t相关推荐

  1. 关于WM_NCHITTEST消息(移动无标题对话框多个)

    我为了移动一个无标题栏的窗体,使用了WM_NCHITTEST消息,这个消息大概如下: 通常,我们拖动对话框窗口的标题栏来移动窗口,但有时候,我们想通过鼠标在客户区上拖动来移动窗口. 一个容易想到的方案 ...

  2. mysql输入命令1002无标题_Linux下远程连接MySQL数据库的方法

    步骤 1.在服务器端开启远程访问 首先进入mysql数据库,然后输入下面两个命令: grant all privileges on *.* to 'root'@'%' identified by 'p ...

  3. C# 系统应用之无标题窗体移动的两种方法

    在做项目界面设计中,常常为了美观需要设置窗体属性"FormBorderStyle"(窗体边框和标题栏外观)为None无标题窗口.此时隐藏标题的窗口怎样实现移动呢?我根据自己的项目从 ...

  4. Android 置Activity全屏和无标题

    今天,实在没有什么好些写的内容,所以在网上找了很久,才决定写这个博客.比较简单,还是想保持写博客的习惯. 一.在代码里设置全屏. Activity设置全屏和无标题栏,要用到andorid.view.W ...

  5. ActionBarActivity设置全屏无标题

    新建的Activity继承自ActionBarActivity,设置全屏无标题本来非常easy的事,可是没想到app居然无缘无故的挂,要么就是白屏一片,要么就是黑屏.坑了我一个多小时.!! 原因是Ac ...

  6. android教程1009无标题,Android ActionBarActivity设置全屏无标题实现方法总结_Android_脚本之家...

    Android  ActionBarActivity设置全屏无标题实现方法总结 前言: 新建的Activity继承自ActionBarActivity,设置全屏无标题本来很简单的事,但是没想到app竟 ...

  7. MFC修改窗口无标题和标题信息,修改执执行文件图标

    一.创建MFC后 窗口显示的是 无标题-工程名 修改方法在网上看到了几种,下面介绍下比较简单的一种: 1.在MianFrame.c文件中找到这个函数 BOOL CMainFrame::PreCreat ...

  8. Visual Studio Code中的无标题(工作区)

    点击文件--将工作区另存为--重新将工作区重命名 即可 我进行更改的时候,发现我之前无标题(工作区)里的文件都消失了,还好发现只是软件里消失.电脑磁盘里保存还有这些文件,之后 打开软件--点击文件-- ...

  9. C++打印size_t和ssize_t和int64_t和uint64_t

    1.main.c //定义:typedef unsigned int size_t; typedef unsigned int uint32_t;typedef signed int ssize_t; ...

最新文章

  1. python界面图片-python图形用户界面(六):可视化给图片添加上文字
  2. Linux常用端口查询命令及常见端口和端口分类
  3. android实现重复动画,android – 多次重复AnimatorSet动画
  4. String Modification CodeForces - 1316B(规律)
  5. 【codevs1722】【NOI1997】最优乘车,单元最短路?
  6. python零基础入门五小时教学_五小时轻松入门Python
  7. PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)
  8. C#进制转换(二进制转十进制 十进制转16进制等)
  9. 功能测试Ⅱ——测试用例设计方法
  10. leaflet地图原理_Web地图呈现原理
  11. 自动售检票系统是基于计算机,车站自动售检票系统存在的必要性
  12. Acwing 1299. 五指山
  13. 20个最棒的英文电子书免费下载网站
  14. hdu 6592 Beauty Of Unimodal Sequence
  15. 推进交通安全文化建设,首先要建立科学的理念
  16. 阿里巴巴对工业互联网志在必得,阿里云如何啃硬骨头?
  17. usaco3.2.4 Feed Ratios
  18. jupyter notebook第三章numpy库的一些案例分析加相关函数的解析
  19. 游泳馆管理系统有什么用?能解决什么问题?
  20. 翻斗式雨量计的组成与工作原理

热门文章

  1. LeetCode70. 爬楼梯 [简单]——动态规划
  2. 推荐几款舍不得卸载的良心app
  3. 无机陶瓷膜在中药制剂生产的新工艺占有一席之地
  4. 炒股入门基础知识之炒股入门?炒股入门股票基础知识该掌握哪些
  5. 为什么日本人打电话时,要先说「もしもし」?
  6. OpenCV(图片自由缩放及边缘裁剪)
  7. 两天撸一个优惠券小程序,记录下开发的小小经验
  8. 三方库 之 分分钟集成腾讯 TBS X5 。。。
  9. RecyclerView局部刷新的坑
  10. 关于kswapd0 CPU占用率高的问题