工作中经常碰到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t等数据类型,所以有必要对此进行梳理。

int_t同类

int_t 为一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型。因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。

  • int8_t      : typedef signed char;
  • uint8_t    : typedef unsigned char;
  • int16_t    : typedef signed short ;
  • uint16_t  : typedef unsigned short ;
  • int32_t    : typedef signed int;
  • uint32_t  : typedef unsigned int;
  • int64_t    : typedef signed  long long;
  • uint64_t  : typedef unsigned long long;
Specifier Common Equivalent Signing Bits Bytes Minimum Value Maximum Value
int8_t signed char Signed 8 1 -128 127
uint8_t unsigned char Unsigned 8 1 0 255
int16_t short Signed 16 2 -32,768 32,767
uint16_t unsigned short Unsigned 16 2 0 65,535
int32_t int Signed 32 4 -2,147,483,648 2,147,483,647
uint32_t unsigned int Unsigned 32 4 0 4,294,967,295
int64_t long long Signed 64 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807
uint64_t unsigned long long Unsigned 64 8 0 18,446,744,073,709,551,615

size_t与ssize_t

size_t主要用于计数,如sizeof函数返回值类型即为size_t。在不同位的机器中所占的位数也不同,size_t是无符号数,ssize_t是有符号数。

  • 在32位机器中定义为:typedef  unsigned int size_t; (4个字节)
  • 在64位机器中定义为:typedef  unsigned long size_t;(8个字节)

由于size_t是无符号数,因此,当变量有可能为负数时,必须使用ssize_t。因为当有符号整型和无符号整型进行运算时,有符号整型会先自动转化成无符号。

int main()
{unsigned short a;short int b = -1;a = b;cout << "b=" << b << endl;  //b=-1cout << "a=" << a << endl;  //a=65535
}

此外,int 无论在32位还是64位机器中,都是4个字节, 且带符号,可见size_t与int 的区别之处。

C中int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t区别相关推荐

  1. int8_t / int16_t / int32_t /int64_t 是什么数据类型

    这些数据类型是 C99 中定义的 #ifndef __int8_t_defined # define __int8_t_defined typedef signed char int8_t; type ...

  2. int32_t int64_t和int的区别

    有些数据类型的确切字节数依赖于程序是如何被编译的,数据类型 long -般在 32 位程 序中为4字节 ,在 64 位程序中则为8字节("32 位程序"或 "64 位程序 ...

  3. int8_t int16_t int32_t等数据类型的定义

    一.数据类型特别是int相关的类型在不同位数机器的平台下长度不同.C99标准并不规定具体数据类型的长度大小,只规定级别: 16位平台 char          1个字节8位 short        ...

  4. int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t区别

    工作中经常碰到int8_t.int16_t.int32_t.int64_t.uint8_t.size_t.ssize_t等数据类型,所以有必要对此进行梳理. int_t同类 int_t 为一个结构的标 ...

  5. PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别)

    PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别) 一.总结 一句话总结: throwable接口+Error类 在PHP7更新中有一条:更多的Error变为可捕获的Exce ...

  6. 媒体查询中“屏幕”和“仅屏幕”之间有什么区别?

    本文翻译自:What is the difference between "screen" and "only screen" in media queries ...

  7. Java Persistence API中的FetchType LAZY和EAGER之间的区别?

    我是Java Persistence API和Hibernate的新手. Java Persistence API中的FetchType.LAZY和FetchType.EAGER什么区别? #1楼 我 ...

  8. js数组中forEach/some/every/map/filter/reduce的区别

    2019独角兽企业重金招聘Python工程师标准>>> // js数组中forEach/some/every/map/filter/reduce的区别// 1. foreach:就是 ...

  9. python中remove函数是什么意思,python中pop函数和remove函数有什么区别

    python中pop函数和remove函数有什么区别 发布时间:2020-12-10 09:36:18 来源:亿速云 阅读:80 作者:小新 小编给大家分享一下python中pop函数和remove函 ...

最新文章

  1. SQLyog连接虚拟机中mysql8.0详解,2003、1130、2058错误码解决
  2. mysql日期序列填充_MySQL如何在范围内填充缺失的日期?
  3. linux网络编程(二)高并发服务器
  4. Linux的实际操作:时间日期类的实用指令(date cal)
  5. 443显示正常服务器错误,wordpress 出现443 NOT FOUND-apache错误的解决方案
  6. 时隔5年 三星要重回苹果闪存零部件供应商名单了
  7. ssh连接Linux很慢,且ssh传输文件很慢的解决方案
  8. Oracle P6培训系列:07设置项目详情
  9. 归并排序算法(二路)——C/C++
  10. abaqus土木结构视频教程
  11. matlab仿真调速,直流调速系统的MATLAB仿真参考程序
  12. WPS简历模板的图标怎么修改_个人求职简历模板怎么选 5000套简历模板领取
  13. 基于C/C++的PCM编码与解码简单实现
  14. 程序员必备:那些实用的Chrome扩展程序
  15. FPS综述:植物次生代谢物与微生物组互作研究进展
  16. 路由器工作原理与静态路由配置
  17. Java 蓝桥杯 基础练习 01字串(循环)
  18. 2021-08-16
  19. 为什么女程序员那么少,我觉得程序员应该是最适合女性的职位
  20. 基于C#实现的《勇士返乡》游戏设计

热门文章

  1. mysql数据类型double,double在数据库怎么定义 mysql中double类型在sql中用什么类型
  2. 同种产品分析报告(抖音和快手)
  3. vincent的歌词
  4. Linux下更高级的网络配置(网络桥接、bond及team网络接口的配置)
  5. Leo答i,Claud“三问《程序员职场第一课》”
  6. Reversing:逆向工程揭密
  7. matlab 训练一个用于降维的暹罗网络(孪生网络)
  8. c/c++ c语言文件读写
  9. HTMLCSS——CSS中设定背景图片无法显示的解决办法
  10. 关于『 一月の集训 』