C语言支持 5 种带符号的整数类型。其中大多数整数类型具有多个同义词,见表1。表1:带符号的标准整数类型类型同义词

signed char

intsigned, signed int

shortshort int, signed short, signed short int

longlong int, signed long, signed long int

long long (C99)long long int, signed long long,signed long long int

对于表1列出来的 5 种带符号整数类型,它们每个都有对应的无符号类型。与带符号类型相比,对应的无符号类型内存大小相同,对齐方式(alignment)也相同。换句话说,如果编译器将 signed int 对象对齐到偶数地址上,则 unsigned int 对象也对齐到偶数地址。表2列出了无符号类型。表2:无符号的标准整数类型类型同义词

_Boolbool(在 stdbool.h 头文件中定义)

unsigned char

unsigned intunsigned

unsigned shortunsigned short int

unsigned longunsigned long int

unsigned long longunsigned long long int

C99 引入了无符号整数类型 _Bool 用来表示布尔值。布尔值真(true)被定义为 1,假(false)被定义为成 0。如果程序中包含 stdbool.h 头文件,也可以使用标识符 bool、true 以及 false,这是 C++

char 类型也是一个标准的整数类型。但是,仅有一个单词的类型名称 char,既可以是 signed char 的同义词,又可以是 unsigned char 的同义词,这由编译器决定。因为这是由所采用的实现版本自行选择的,所以严格地说,char、signed char和unsigned char 是三种不同的数据类型。

如果程序会用到的 char 值包括小于 0 或大于 127 的情况,则应该使用 signed char 或者 unsigned char,而不是 char。

可以对字符变量做算术操作。由程序自身决定是否将 char 变量的值解释为字符码或其他东西。例如,下面的小程序将属于 char 类型的 ch 变量,既看成一个整数又看成一个字符,不过是在不同时刻:char ch= 'A'; // 数据类型为char的变量 printf("The character %c has the character code %d.n", ch, ch); for ( ; ch <= 'Z' ; ++ch ) printf("%2c", ch);

在 printf() 语句中,ch 先被视为一个字符以获得显示,然后被视为该字符的整数编码。同样,for 循环在执行 ++ch 的时候将 ch 视为整数,在执行 printf() 的时候,将 ch 视为字符。在使用 7 位 ASCII 码或者扩展 ASCII 码的系统中,上述程序代码将输出以下内容:

The character A has the character code 65.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

各种类型的长度和取值范围

char 类型的值占用一个字节(换句话说,sizeof(char)总是等于1),并且 1 个字节至少是 8 位长。基本字符集中的每个字符都可以作为一个正整数值以 char 对象表示。

对于其他标准类型,C语言只定义了其最小的存储空间:short 类型至少占用 2 个字节;

long 类型至少占用 4 个字节;

而 long long 类型至少占用 8 个字节。

此外,虽然整数类型实际所占用的空间可能大于它们的最小空间,但是不同类型的空间大小一定遵循以下次序:

sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)

int 类型是最适应计算机系统架构的整数类型,它具有和 CPU 寄存器相对应的空间大小和位格式。

表3列出了标准整数类型的存储空间大小和值范围。表3:标准整数类型常见存储空间大小和取值范围类型存储空间大小最小值最大值

char(与 signed char 或 unsigned char 相同)

unsigned char1个字节0255

signed char1个字节-128127

int2个或4个字节-32 768 或 -2 147 483 64832767 或 2 147 483 647

unsigned int2个或4个字节065 535 或 4 294 967 295

short2个字节-32 76832 767

unsigned short2个字节065 535

long4个字节-2 147 483 6482 147 483 647

unsigned long4个字节04 294 967 295

long long (C99)8个字节-9 223 372 036 854 775 8089 223 372 036 854 775 807

Unsigned long long (C99)8个字节018 446 744 073 709 551 615

在下面的示例中,如果系统运行平台是32位,则int类型的iIndex和iLimit变量分别占用4个字节:int iIndex, // 定义两个int变量 iLimit= 1000; // 初始化第二个

利用 sizeof 运算符,可以获取一个数据类型或变量的空间大小。表达式 sizeof(type)输出指定类型的大小;sizeof expression 输出指定表达式类型的大小。输出结果是类型为 size_t 的一组字节。如果操作数是一个表达式,则输出结果是该表达式的类型。size_t 类型作为一个无符号整数类型(如 unsigned long)定义在头文件 stddef.h、stdio.h,以及其他头文件中。

在上述示例中,sizeof(int) 的值会和 sizeof(iIndex)一样(都是4)。sizeof(iIndex) 的圆括号可以去掉,因为 iIndex 是一个表达式,不是一个类型。

可以在头文件 limits.h 中找到所采用编译器中整数类型的取值范围,它们定义为宏,例如宏 INT_MIN、INT_MAX 和 UINT_MAX 等。下面的程序使用这些宏来显示 char 和 int 类型的最小值和最大值。

例1:char和int类型的取值范围#include #include // 该文件包含了CHAR_MIN、INT_MIN等宏 int main() { printf("Storage sizes and value ranges of the types char and intnn"); printf("The type char is %s.nn", CHAR_MIN<0? "signed":"unsigned"); printf(" Type Size (in bytes) Minimum Maximumn"  "--------------------------------------------------n"); printf("char %8zu %20d %15dn", sizeof(char), CHAR_MIN, CHAR_MAX ); printf("int %8zu %20d %15dn", sizeof(int), INT_MIN, INT_MAX ); return 0; }

在标准头文件中定义的整数类型

标准库的头文件针对特定用途定义了很多整数类型,例如用来显示宽字符的 wchar_t 类型。这些类型是 typedef 名称,它们是标准整数类型的同义词。

类型 ptrdiff_t、size_t 和 wchar_t 定义在头文件 stddef.h 中(以及其他头文件中);类型 char16_t 和 char32_t 定义在头文件 uchar.h 中。为了特殊需要,指定位长度的整数类型(带符号和无符号变量)定义在头文件 stdint.h 中。

此外,头文件 stdint.h 也为标准库中的所有整数类型可显示的最大值与最小值定义了宏。例如,SIZE_MAX 等于可以在 size_t 类型变量中存储的最大值。原文始发于:C语言整数类型(含取值范围和长度)

C语言取小于自身的最大整数,C语言整数类型(含取值范围和长度)相关推荐

  1. c语言 误差小于10 -6,上海理工大学C语言2011期中试题和答案

    2010/2011学年第二学期期中测试 高级语言程序设计(C) 试卷 A □B A1.输入一行字符,统计其中的英文字母个数. #include void main() { char ch; int n ...

  2. c语言运算符优先级 从右到左,c语言运算符优先级,结合性(左/右结合详解)

    重新翻了遍c语言,觉得对c语言运算符结合性有必要提一下,毕竟去年我自己刚学c语言的时候,就没搞明白结合性的问题. 什么是左结合?什么是右结合?它们是干嘛用的?它们是什么时候用的? 本文将围绕这几个问题 ...

  3. C++ — 类型萃取

    类型萃取 在编程中我们可能时常会听到类型萃取这个高大上的"学术名词",我们今天来探究一下这个高大上的学术名词 到底是何方神圣,先看看官方的解释类型萃取使用模板技术来萃取类型(包含自 ...

  4. python整数类型没有取值范围限制_详解Python中6种数据类型

    Python中数据类型主要有六种:数字类型,字符串类型,元组类型,列表类型,文件类型和字典类型,我们今天先介绍前四种类型. 假如在Python程序中,出现了"010",那么这个&q ...

  5. java存储整数,用于存储整数数值的是 JAVA四种整数数据类型的取值范围分别是多少...

    JAVA四种整数数据类型的取值范围分别是多少 byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1) short的取值范围为-32768~32767,占用2个字节(-2的1 ...

  6. c语言取字节高四位低四位,C语言取一个数的最高位

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:C语言取一个数的最高位回答:#include void main(){int n,m;scanf("%d",n);m=n;while ...

  7. C语言简单算法之A乘以B,求整数平均值,是不是胖了,输出各位数字

    C语言简单算法之A乘以B,求整数平均值,是不胖了,输出各位数字 1.题目一:A乘以B 1.实验代码 include<stdio.h> int main() {int A,B;scanf(& ...

  8. c语言无符号扩展,深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断...

    开篇请各位猿友允许LZ啰嗦几句,最近一直在写计算机系统原理这系列文章,也已经下定决心要把这本书的内容写完.主要目的其实是为了巩固LZ的理解,另外也想把这些内容分享给猿友们,毕竟LZ觉得这些内容对程序猿 ...

  9. 【重温经典C语言】~c语言中%x、%c、%d、%x等等等、c语言取地址符的作用、C语言中的 联合体

    本章目录: 1. c语言中%x.%c.%d.%x等等等 2. c语言取地址符&的作用 3. 了解 C语言中的 联合体 3.1 什么是联合体? 3.2 定义 3.2.1 举例 3.3 初始化联合 ...

最新文章

  1. 掌握 MySQL 这 19 个骚操作,效率至少提高3倍
  2. AJAX 在Django 设置csrf_token
  3. MySQL -> ES 数据同步 配置步骤
  4. chisel快速入门(一)
  5. python设计模式23-访问者模式
  6. python 百分比输出_获取Linux系统负荷百分比的python脚本
  7. java文件移动重命名_Java重命名文件和移动文件
  8. 有什么python在线编辑器-Python常用的编辑器有哪些?老男孩Python
  9. 计算机网络—数据链路层的流量控制与可靠传输机制(思维导图)
  10. 深入浅出WPF 总结
  11. s8 android8 黑域,【转帖】 8.0未Root禁用系统软件(不用黑域、冰箱之类的软件)...
  12. 管理员登录页面html代码,自己做的一个后台管理员登陆界面 .cshtml
  13. 【应急】应急信息“一张图”,福建省是这样用的
  14. python版公众号爬虫
  15. 自家电脑架设网站服务器方法
  16. 逆向思维--魔兽世界封包分析
  17. python多线程执行同样代码_Python 多线程、多进程 (一)之 源码执行流程、GIL
  18. 技术改变生活——用HanLP来协助处理现实中问题
  19. asynctaskdemo(Info)5
  20. python定间隔取点(np.linspace)

热门文章

  1. 算法-lowb三人组
  2. JavaWeb:前端开发基础
  3. swift Tablview中cell 的用withtag方法绑定里面的button
  4. iOS根据经纬度获得地理名称
  5. 【线性代数公开课MIT Linear Algebra】 第六课 AX=b与列空间、零空间
  6. No resource found that matches the given name 'Theme.AppCompat.Light'.
  7. 18 TaskScheduler任务调度器抽象基类——Live555源码阅读(一)任务调度相关类
  8. 将m个苹果放入n个盘子的问题【转】
  9. 推荐算法之用户推荐(UserCF)和物品推荐(ItemCF)对比
  10. javascript下的数值型比较真的没有那么简单