`
javasogo
  • 浏览: 1851800 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C核心技术手册(十四)

 
阅读更多

整数类型

有五种带符号整数类型,其中多数可以由几个近义词指定,如下表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 来表示布尔值,其中true1false0,如果你在程序中包含了头文件stdbool.h,那么你也可以使用标识符bool, truefalse.这些对c++程序员来说很熟悉,宏bool _Bool类型的同义词,turefalse为常量10的象征符号。

Char类型也是整形的一种,但是,一个词的char类型有可能与signed char等价,也有可能与unsigned char相同,这取决于编译器,因为这在执行时才会被选择,char, signed charunsigned char是形式上不同的三种类型。

注:如果你的程序使用char且取值小于0或大于127,你应该使用signed charunsigned char来代替。

你可以使用字符变量为编写算法,这取决于你的程序将char变量的值看做字符编码还是其他,例如,下面的代码段中视ch中的char值既为整形,又为一个字符,只是在不同的时刻:

printf()语句中,ch第一次被视为一个字符,且它的值被打印出来,接着打印出它的数值,同样地,在for循环中,指令++ch中,ch被视做整数,在函数printf()中又被看做字符,在系统中使用的是7-bitASCII编码,或者它的扩展,这段代码产生如下输出:

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型变量iIndexiLimit32位机器上占据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中使用这些宏来显示charint的最小值和最大值。

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语言核心技术(英文文字版) #### 书籍概述 《C语言核心技术》是一本由 Tony Crawford 和 Peter Rinz 合著的经典技术书籍,由著名的 O'Reilly 出版社出版。该书首次发布于2005年12月,全书共计618页,ISBN号...

    c语言核心技术(C in a Nutsbell)

    ### C语言核心技术(C in a Nutshell) #### 知识点概述 《C语言核心技术》是一本由C语言专家Peter Prinz与Tony Crawford合作撰写的权威性书籍,它旨在为C语言程序员提供全面且深入的核心知识和技术指导。本书不仅...

    c语言技术手册 chm

    《C语言技术手册》是一本全面且深入探讨C语言编程的资源,旨在帮助开发者和学习者迅速查询和理解C语言的各种函数及语法特性。CHM(Compiled Help Manual)格式是微软开发的帮助文档格式,通常包含丰富的索引、搜索...

    C语言核心技术(C: In a Nutshell)

    ### C语言核心技术(C: In a Nutshell) #### 核心知识点概览 《C语言核心技术》这本书由Tony Crawford和Peter Prinz等作者编写,由O'Reilly出版社于2005年12月出版。全书共有618页,涵盖了C语言的所有核心概念和...

    C语言核心技术 作者Tony rawford

    ### C语言核心技术——《C in a Nutshell》 #### 一、书籍简介 《C in a Nutshell》是由Tony Rawford和Peter Rinz共同编写的关于C语言的权威指南,出版社为O'Reilly,出版日期为2005年12月,ISBN编号为0-596-00697...

    C语言核心技术(pdf格式)

    《C语言核心技术》不仅适合C语言初学者快速入门,也适合有经验的程序员作为日常工作的参考手册。该书内容丰富,结构清晰,通过大量实例加深读者对C语言的理解和掌握,是C语言学习者和专业程序员的必备书籍之一。 ...

    LINUX内核技术手册2.pdf

    根据提供的信息,《LINUX内核技术手册2.pdf》是一本专注于Linux内核配置、构建及安装的专业技术书籍。以下是对该书所涉及的关键知识点的详细总结: ### 一、书籍基本信息 - **书名**: Linux内核技术手册 - **作者*...

    S3C2416核心板开发板硬件手册

    ### S3C2416核心板开发板硬件...综上所述,S3C2416核心板及其开发板为各类嵌入式系统设计提供了强大的硬件基础,其详细的硬件手册则为开发者提供了全面的技术指导和法律提示,是进行相关项目开发不可或缺的参考资料。

    C核心技术手册 (又名:C - In a Nutshell中文版)

    ### C核心技术手册知识点总结 #### 一、C语言的基础语法 **1.1 C的特征** C语言是一种过程式编程语言,由Dennis Ritchie于1970年代初在贝尔实验室开发,最初是为了实现UNIX操作系统及其应用程序能够尽可能地与...

    C语言核心技术(英文PDF)

    《C语言核心技术》不仅适合初学者作为C语言学习的快速入门指南,也适合有经验的程序员作为日常工作的实用参考手册。书中深入浅出地讲解了C语言的各个方面,辅以丰富的示例代码,使读者能够在实践中加深理解和记忆。...

    云打印C-Lodop技术手册

    《云打印C-Lodop技术手册》是一本详细介绍如何利用C-Lodop进行云端打印操作的技术文档。C-Lodop,全称为Cloud Lodop,是一款高效便捷的云打印解决方案,尤其适用于小票、箱贴、财务单等各类文档的远程打印需求。其...

    C语言核心技术(英文).pdf

    综上所述,《C语言核心技术》这本书不仅是一本C语言的入门指南,还是一本详尽的参考手册。无论是初学者还是有经验的开发者,都能从中受益匪浅。通过系统地学习这些内容,读者可以更高效地使用C语言进行编程,并解决...

    MySQL核心技术手册(第二版)][1].(美)戴尔.扫描版.part2

     ·提供了mysql语句、函数、配置选项和实用工具的一个完整手册。  ·给出了几个指导章节用于帮助新手入门。  ·为php、perl和c语言提供了应用程序编程接口(api)。  ·在每章的api开头部分提供了简要的指南。  ...

    s3c2440a中文技术手册全

    【标题】"s3c2440a中文技术手册全"揭示了这是一份针对Samsung S3C2440A处理器的详尽中文参考资料。S3C2440A是Samsung公司推出的一款基于ARM920T内核的微处理器,广泛应用于嵌入式系统设计,如智能手机、PDA、数字...

Global site tag (gtag.js) - Google Analytics