整数类型
有五种带符号整数类型,其中多数可以由几个近义词指定,如下表Table 2-1
Table 2-1. Standard signed integer types
类型
|
同义词
|
Signed char
|
|
Int
|
Signed,signed int
|
Short
|
Short int, signed short,signed short int
|
Long
|
Long int, signed long, signed long int
|
Long long (C99)
|
Long long int, signed long long, signed long long int
|
对于表Table 2-1中每一个有符号整形类型,存在个相应的占据同样大小内存的无符号类型,换句话说,如果编译器排列signed int对象在偶数字节的地址,那么unsigned int 对象也排列在偶数地址,这些无符号类型可参见下表Table 2-2.
Table 2-2. Unsigned standard integer types
类型
|
同义词
|
_Bool
|
Bool(define in stdbool.h)
|
Unsigned char
|
|
Unsigned int
|
Unsigned
|
Unsigned short
|
Unsigned short int
|
Unsigned long
|
Unsigned long int
|
Unsigned long long
|
Unsigned long long int
|
C99引入无符号整形_Bool 来表示布尔值,其中true为1,false为0,如果你在程序中包含了头文件stdbool.h,那么你也可以使用标识符bool, true和false.这些对c++程序员来说很熟悉,宏bool 是_Bool类型的同义词,ture和false为常量1和0的象征符号。
Char类型也是整形的一种,但是,一个词的char类型有可能与signed char等价,也有可能与unsigned char相同,这取决于编译器,因为这在执行时才会被选择,char, signed char和unsigned char是形式上不同的三种类型。
注:如果你的程序使用char且取值小于0或大于127,你应该使用signed char或unsigned char来代替。
你可以使用字符变量为编写算法,这取决于你的程序将char变量的值看做字符编码还是其他,例如,下面的代码段中视ch中的char值既为整形,又为一个字符,只是在不同的时刻:
在printf()语句中,ch第一次被视为一个字符,且它的值被打印出来,接着打印出它的数值,同样地,在for循环中,指令++ch中,ch被视做整数,在函数printf()中又被看做字符,在系统中使用的是7-bit的ASCII编码,或者它的扩展,这段代码产生如下输出:
Char类型通常占用一个字节,换句话说,sizeof(char)通常等于1,且至少是8位的宽度,基本字符集中的每一个字符均可使用一个char对象来表示其值。
C仅定义其他类型的最小取值,short类型至少两个字节,long至少四个字节,long long至少八个字节,此外,虽然整形可能大于它的最小取值,大小必须遵循下面的顺序:
sizeof(short) ≤sizeof(int) ≤sizeof(long) ≤sizeof(long long)
int 类型是最适合目标系统的整数类型,与CPU寄存器的大小和位格式相适应。
整型的内部表示为二进制,有符号类型可能会使用符号和大小来表示,当做1的补码,或2的补码,最常用的是2的补码,带有符号的非负数的值取值在无符号类型的范围之内,同样,一个非负数的值也使用二进制表示,Table 2-3为对于有符号和无符号整型的位域表示。
Table 2-3. Binary representations of signed and unsigned 16-bit integers
二进制
|
无符号十进制整型
|
有符号十进制整型(1补码)
|
有符号十进制整型(2的补码)
|
00000000 00000000
|
0
|
0
|
0
|
00000000 00000001
|
1
|
1
|
1
|
00000000 00000010
|
2
|
2
|
2
|
…
|
|
|
|
01111111 11111111
|
32,767
|
32,767
|
32,767
|
10000000 00000000
|
32,768
|
-32,767
|
-32,768
|
10000000 00000011
|
32769
|
-32,766
|
-32,767
|
…
|
|
|
|
11111111 11111110
|
65,534
|
-1
|
-2
|
11111111 11111111
|
65,535
|
-0
|
-1
|
Table 2-4列出标准整型的大小和取值范围
Table 2-4. Common storage sizes and value ranges of standard integer types
|
|
类型
|
存储大小
|
最小值
|
最大值
|
Char
|
(same as either signed char or unsigned char)
|
Unsigned char
|
One byte
|
0
|
255
|
Signed char
|
One byte
|
-128
|
127
|
Int
|
Two bytes or four bytes
|
-32,768 or -2,147,483,648
|
32,767 or 2,147,483,647
|
Unsigned int
|
Two bytes or four bytes
|
0
|
65,535 or 2,147,483,647
|
Short
|
Two bytes
|
-32,768
|
32,768
|
Unsigned short
|
Two bytes
|
0
|
65535
|
Long
|
Four bytes
|
-2,147,483,648
|
2,147,483,647
|
Unsigned long
|
Four bytes
|
0
|
4,294,967,295
|
Long long(C99)
|
Eight bytes
|
-9,223,372,036, 854,775,808
|
9,223,372,036, 854,775,807
|
Unsigned long long (C99)
|
Eight bytes
|
0
|
18,446,744,073, 709,551,615
|
下面的例子中,int型变量iIndex和iLimit在32位机器上占据4个字节:
int iIndex, // Define two int variables and
iLimit = 1000; // initialize the second one.
要获得一个类型或变量的占用的空间大小,可以使用sizeof操作符,表达式sizeof(type) 或 sizeof expression会计算出类型或对象的字节数,如果操作数是个表达式,那么计算出的大小将是此表达式类型的大小,在前面的例子中,sizeof(int)和sizeof(iIndex)的大小相同,均为4,iIndex两边的圆括号可以忽略。
你可以在头文件limits.h中找到你的C编译器中整型的范围,它们以宏的形式定义,如INT_MIN, INT_MAX,UINT_MAX等等。下面的例子Example 2-1中使用这些宏来显示char和int的最小值和最大值。
Example 2-1. Value ranges of the types char and int
在整型的算法中,有可能发现溢出,当一个操作的结果不在类型的取值范围中时就会生溢出,在无符号整型的算法中,溢出被忽略,在数学术语中,一个无符号整型操作的有效结果等于它的值除以UTYPE_MAX+1的余数,这里的UTYPE_MAX为此无符号类型的最大取值,例如,下面的例子将会使变量的值溢出:
unsigned int ui = UINT_MAX;
ui += 2; // Result: 1
C中仅提出了无符号整型的溢出现象,对于其他类型,溢出的结果是没有定义的,例如,溢出可能会被忽略,或者可能抛出一个信号,如果没有被扑获,将使用程序Abort.
分享到:
相关推荐
### C语言核心技术(英文文字版) #### 书籍概述 《C语言核心技术》是一本由 Tony Crawford 和 Peter Rinz 合著的经典技术书籍,由著名的 O'Reilly 出版社出版。该书首次发布于2005年12月,全书共计618页,ISBN号...
### C语言核心技术(C in a Nutshell) #### 知识点概述 《C语言核心技术》是一本由C语言专家Peter Prinz与Tony Crawford合作撰写的权威性书籍,它旨在为C语言程序员提供全面且深入的核心知识和技术指导。本书不仅...
《C语言技术手册》是一本全面且深入探讨C语言编程的资源,旨在帮助开发者和学习者迅速查询和理解C语言的各种函数及语法特性。CHM(Compiled Help Manual)格式是微软开发的帮助文档格式,通常包含丰富的索引、搜索...
### C语言核心技术(C: In a Nutshell) #### 核心知识点概览 《C语言核心技术》这本书由Tony Crawford和Peter Prinz等作者编写,由O'Reilly出版社于2005年12月出版。全书共有618页,涵盖了C语言的所有核心概念和...
### C语言核心技术——《C in a Nutshell》 #### 一、书籍简介 《C in a Nutshell》是由Tony Rawford和Peter Rinz共同编写的关于C语言的权威指南,出版社为O'Reilly,出版日期为2005年12月,ISBN编号为0-596-00697...
《C语言核心技术》不仅适合C语言初学者快速入门,也适合有经验的程序员作为日常工作的参考手册。该书内容丰富,结构清晰,通过大量实例加深读者对C语言的理解和掌握,是C语言学习者和专业程序员的必备书籍之一。 ...
根据提供的信息,《LINUX内核技术手册2.pdf》是一本专注于Linux内核配置、构建及安装的专业技术书籍。以下是对该书所涉及的关键知识点的详细总结: ### 一、书籍基本信息 - **书名**: Linux内核技术手册 - **作者*...
### S3C2416核心板开发板硬件...综上所述,S3C2416核心板及其开发板为各类嵌入式系统设计提供了强大的硬件基础,其详细的硬件手册则为开发者提供了全面的技术指导和法律提示,是进行相关项目开发不可或缺的参考资料。
### C核心技术手册知识点总结 #### 一、C语言的基础语法 **1.1 C的特征** C语言是一种过程式编程语言,由Dennis Ritchie于1970年代初在贝尔实验室开发,最初是为了实现UNIX操作系统及其应用程序能够尽可能地与...
《C语言核心技术》不仅适合初学者作为C语言学习的快速入门指南,也适合有经验的程序员作为日常工作的实用参考手册。书中深入浅出地讲解了C语言的各个方面,辅以丰富的示例代码,使读者能够在实践中加深理解和记忆。...
《云打印C-Lodop技术手册》是一本详细介绍如何利用C-Lodop进行云端打印操作的技术文档。C-Lodop,全称为Cloud Lodop,是一款高效便捷的云打印解决方案,尤其适用于小票、箱贴、财务单等各类文档的远程打印需求。其...
综上所述,《C语言核心技术》这本书不仅是一本C语言的入门指南,还是一本详尽的参考手册。无论是初学者还是有经验的开发者,都能从中受益匪浅。通过系统地学习这些内容,读者可以更高效地使用C语言进行编程,并解决...
·提供了mysql语句、函数、配置选项和实用工具的一个完整手册。 ·给出了几个指导章节用于帮助新手入门。 ·为php、perl和c语言提供了应用程序编程接口(api)。 ·在每章的api开头部分提供了简要的指南。 ...
【标题】"s3c2440a中文技术手册全"揭示了这是一份针对Samsung S3C2440A处理器的详尽中文参考资料。S3C2440A是Samsung公司推出的一款基于ARM920T内核的微处理器,广泛应用于嵌入式系统设计,如智能手机、PDA、数字...