上一篇中,我们了解到“位与字节”的含义,并分析无符号短整形和有符号短整形的运算方式。本篇文章中,我们进行分析二进制到八进制、十六进制转换等内容。
章节预览:
1.2.2 无符号类型与有符号类型的区别
1.2.3 短整型、整形以及长整形的区别
1.2.4 整形
1.2.5 长整形
1.2.6 判断类型字节长度
1.2.7 八进制、十进制和十六进制
1.2.8 格式化整数规定符和取值范围(对应位数)
1.3 字符类型
1.3.1 无符号字符类型
1.3.2 有符号字符类型
1.3.3 字符类型与Ascll码表
目录预览
章节内容:
1.2.2 无符号类型与有符号类型的区别
通常情况下,无符号类型拥有的所有bit(位)都属于数字位;有符号类型中,最高bit(位)为符号位,其余bit(位)为数字位。当然,还存在一种特殊情况,有符号类型计算负数最小值时,需要考虑最高进位。
1.2.3 短整型、整形以及长整形的区别
在C语言中,短整型、整形和长整形采用相同的二进制转换方式,唯一不同之处是他们的位数(取值范围)。
1.2.4 整形
unsigned int表示“无符号整型”,在16位系统下int占用两个字节,32位以及64位系统下int占用四个字节。
signed int表示“有符号整型”,程序中简写为int,在16位系统下int占用两个字节,32位以及64位系统下int占用四个字节。
特别说明:
当编译器数据模型为LP32(32位),unsigned int 和 int占用两个字节。
1.2.5 长整形
unsigned long int表示“无符号长整型”,程序中简写为unsigned long,在16位、32位系统下unsigned long占用四个字节,64位系统下unsigned long占用八个字节。
signed long int表示“有符号长整型”,程序中简写为long,在16位、32位系统下long占用四个字节,以及64位系统下long占用八个字节。
特别说明:
当编译器数据模型为LLP64 (64位)时,unsigned long 和 long 占用四个字节。
在C99标准中,扩展了新的整数类型 unsigned long long 和 long long类型,它们属于长整形的扩充版本。目前大部分编译器中,unsigned long long 和 long long类型分别占用八个字节。
1.2.6 判断类型字节长度
在不同的编译器位数以及不同的编译器数据模型下,所得到的类型字节长度也不相同。在C语言中,我们可以通过sizeof函数获取类型或类型对象的长度。
sizeof函数用法:
unsigned short a = 0;
int aa = sizeof(a); 或 int aa = sizeof a;
通过计算类型对象获取类型长度。
int aa = sizeof(unsigned short);
通过计算类型获取类型长度。
1.2.7 八进制、十进制和十六进制
现在我们了解了不同整数类型的位数以及有符号和无符号的二进制到转换十进制数字,实际编程中十进制也是比较简便和常用的数据存储、查看方式。
在实际编程过程中,八进制和十六进制数字在部分领域也作为主要的数据存储、查看方式,比如DSP、DMA数据采集存储、计算内存地址等。
二进制数字转换到八进制数字:
二进制数字1100 1001:
1.2-3 二进制转换到八进制数字
二进制数字转换到八进制数字时,每三位二进制数字转换为一位八进制数字,不满足三位时,高位补0对齐,参考图1.2-3 二进制转换到八进制数字,计算方式为:
(2^0 + 0 + 0) * 10^0 + (2^0 + 0 + 0) * 10^1 + (2^0 + 2^1 + 0) * 10^2 = 311
bit0-bit2 bit3-bit5 bit6-bit9
1 10 &n