0
点赞
收藏
分享

微信扫一扫

(第15章)LinuxC本质中数据类型详解


文章目录

  • ​​一、整型​​
  • ​​1.我们常用的char型是无符号数还是有符号数?​​
  • ​​2.Implementation-defined、Unspecified和Undefined区别?​​
  • ​​3.通常的编译器实现遵守ILP32或LP64规范​​
  • ​​4.整数常量​​
  • ​​二、浮点型​​
  • ​​1.大部分平台的浮点数, float 型通常是32位, double 型通常是64位​​
  • ​​三、类型转换:了解有符号数和无符号数混用问题​​
  • ​​1.Integer Promotion​​
  • ​​2.Usual Arithmetic Conversion​​
  • ​​(1)含义​​
  • ​​(2)转换规则和转换级别​​
  • ​​(3)由赋值产生的类型转换​​
  • ​​(4)getchar的返回值是int型​​
  • ​​(5)强制类型转换​​
  • ​​(6)编译器如何处理类型转换?​​

一、整型

1.我们常用的char型是无符号数还是有符号数?

(1)在C语言中 char 型占一个字节的存储空间,一个字节通常是8个bit。

  • 如果这8个bit按无符号整数来解释,取值范围是0~255。
  • 如果按有符号整数来解释,取值范围是-128~127。

(2)x86平台的 gcc 定义 char 型是有符号的。

(3)如果你要写可移植的代码,就必须清楚哪些写法是不可移植的。

(4)ASCII码的取值范围是0~127,所以不管 char 型是有符号的还是无符号的,存一个ASCII码都没有问题。

  • 一般来说,如果用 char 型存ASCII码字符,就不必明确写是signed 还是 unsigned
  • 如果用 char 型表示8位的整数,为了可移植性就必须写明是 signed 还是unsigned

2.Implementation-defined、Unspecified和Undefined区别?

(第15章)LinuxC本质中数据类型详解_浮点数

3.通常的编译器实现遵守ILP32或LP64规范

(第15章)LinuxC本质中数据类型详解_浮点数_02


说明:

从现在开始本书做以下约定:在以后的陈述中,平台是x86/Linux/gcc,遵循ILP32,并且 char 是有符号的,我不会每次都加以说明。

4.整数常量

(1)C语言的常量有整数常量、字符常量、枚举常量和浮点数常量四种,其实字符常量和枚举常量的类型都是 int 型,因此前三种常量的类型都属于整型。

(2)八进制整数常量以0开,十六进制整数常量以0x或0X开头。

(3)整数常量的类型

(第15章)LinuxC本质中数据类型详解_类型转换_03


学习整数常量的类型有什么用?看下面的eg1

(第15章)LinuxC本质中数据类型详解_浮点数_04


(第15章)LinuxC本质中数据类型详解_浮点数_05


eg2:

(第15章)LinuxC本质中数据类型详解_编译器_06

二、浮点型

1.大部分平台的浮点数, float 型通常是32位, double 型通常是64位

2.在x86平台上,大多数编译器实现的 long double 型是80位, gcc 实现的 long double 型是12字节(96位)。

3.没有后缀的浮点数常量是 double 型的,有后缀f或F的浮点数常量是 float 型的,有后缀l或L的浮点数常量是 long double 型的。

三、类型转换:了解有符号数和无符号数混用问题

1.Integer Promotion

(1)实参和形参的关系

(第15章)LinuxC本质中数据类型详解_类型转换_07


(2)算数运算中的类型转换

(第15章)LinuxC本质中数据类型详解_浮点数_08


(第15章)LinuxC本质中数据类型详解_类型转换_09

2.Usual Arithmetic Conversion

(1)含义

(第15章)LinuxC本质中数据类型详解_类型转换_10

(2)转换规则和转换级别

(第15章)LinuxC本质中数据类型详解_浮点数_11

(3)由赋值产生的类型转换

(第15章)LinuxC本质中数据类型详解_编译器_12

(4)getchar的返回值是int型

(第15章)LinuxC本质中数据类型详解_浮点数_13

(5)强制类型转换

(第15章)LinuxC本质中数据类型详解_类型转换_14

(6)编译器如何处理类型转换?

本节介绍编译器如何处理任意两种类型之间的转换。现在要把一个M位的类型(值为X) 转换成一个N位的类型,所有可能的情况如下表所示。

(第15章)LinuxC本质中数据类型详解_浮点数_15


说明:

(第15章)LinuxC本质中数据类型详解_类型转换_16


eg:

(第15章)LinuxC本质中数据类型详解_编译器_17


举报

相关推荐

0 条评论