上一篇<一起学习C语言:C语言数据类型(一)>中,我们了解到“位与字节”的含义,并分析无符号短整形和有符号短整形的运算方式。本篇文章中,我们进行分析二进制到八进制、十六进制转换等内容。

章节预览:

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                               300

这里只是展示数字计算,实际转换过程不这么做。

二进制数字转换到十六进制数字:
    二进制数字100 1111:

1.2-4 二进制转换到十六进制数字

二进制数字转换到十六进制数字时,每四位二进制数字转换为一位十六进制数字,不满足四位时,高位补0对齐,参考图1.2-4 二进制转换到十六进制数字,计算方式为:
      (2^0 + 2^1 + 2^2 + 2^3) * 0x10^0 + (0+ 0 + 2^2 + 0) * 0x10^1 = 4f或4F
                        bit0-bit3                                    bit4-bit7
                              f                                               4

使用十六进制数时,需要在数字前加上0x或0X。这里只是展示数字计算,实际转换过程不这么做。

1.2.8 格式化整数规定符和取值范围(对应位数)
格式化整数规定符 描述信息 参数范围 bit
%d或%i 十进制有符号整数 -214748364至2147483647 32
%u 十进制无符号整数 0至4294967295 32
%o 八进制无符号整数 0至37777777777 32
%x 十六进制无符号整数(小写) 0至ffffffff 32
%X 十六进制无符号整数(大写) 0至FFFFFFFF 32
%I64d 64位有符号整数(MFC(windows平台)) -9223372036854775808至9223372036854775807 64
%lld 64位有符号整数(linux平台) -9223372036854775808至9223372036854775807 64
%I64u 64位无符号整数(MFC(windows平台)) 0至18446744073709551615 64
%llu 64位无符号整数(linux平台) 0至18446744073709551615 64

我们再一次见到了这张表格,这次我们结合上述的整数类型完成更多的打印方式。
  需要说明的是,在部分编译器中使用格式化整数规定符计算超过32位的数字时,存在错误结果的现象。

1.3 字符类型

1.3.1 无符号字符类型

unsigned char表示“无符号字符类型”,在16位、32位以及64位系统下都只占用一个字节(Byte)。unsigned char效果等同于与Byte,取值范围(与Byte相同)为0—2^8-1即 0—255。unsigned char也可以理解为C语言中Byte的实现体。

1.3.2 有符号字符类型

signed char表示“有符号字符类型”,程序中简写为char,在16位、32位以及64位系统下也是占用一个字节(Byte)。char取值范围为-27—27-1即 -128—127。对于有符号类型而言,最高位(bit)作为标记符号使用,关于有符号类型的计算方式参考“1.2.1 短整型”。

1.3.3 字符类型与Ascll码表
十进制数 二进制数 缩写/符号 程序显示 名称描述
0 0000 0000 NUL 0 空字符
1 0000 0001 SOH ‘□’ 标题开始
2 0000 0010 STX ‘’ 正文开始
3 0000 0011 ETX ‘□’ 正文结束
4 0000 0100 EOT ‘□’ 传输结束
5 0000 0101 ENQ ‘□’ 请求
6 0000 0110 ACK ‘□’ 请求回应/确认回应
7 0000 0111 BEL ‘□’ 响铃
8 0000 1000 BS ‘□’ 退格
9 0000 1001 HT ’ ’ 水平定位符
10 0000 1010 LF ’ ’ 换行键
11 0000 1011 VT ‘□’ 垂直定位符
12 0000 1100 FF ‘♠’ 换页键
13 0000 1101 CR ’ ’ 归位键
14 0000 1110 SO ‘□’ 取消变换
15 0000 1111 SI ‘□’ 启用变换
16 0001 0000 DLE ‘□’ 跳出数据通讯
17 0001 0001 DC1 ‘□’ 设备控制一
18 0001 0010 DC2 ‘□’ 设备控制二
19 0001 0011 DC3 ‘□’ 设备控制三
20 0001 0100 DC4 ‘□’ 设备控制四
21 0001 0101 NAK ‘□’ 确认失败回应
22 0001 0110 SYN ‘□’ 同步用暂停
23 0001 0111 ETB ‘□’ 区块传输结束
24 0001 1000 CAN ‘□’ 取消
25 0001 1001 EM ‘□’ 连接介质中断
26 0001 0101 SUB ‘□’ 替换
27 0001 1011 ESC ‘□’ 跳出/退出
28 0001 1100 FS ‘’ 文件分割符
29 0001 1101 GS ‘’ 组群分隔符
30 0001 1110 RS ’ ’ 记录分隔符
31 0001 1111 US ‘¬’ 单元分隔符
32 0010 0000 (space) ’ ’ 空格符
33 0010 0001 ! ‘!’ 感叹号
34 0010 0010 " ‘"’ 双引号
35 0010 0011 # ‘#’ 数字符号
36 0010 0100 $ ‘$’ 美元符号
37 0010 0101 % ‘%’ 百分号
38 0010 0110 & ‘&’ 与符号
39 0010 0111 ‘’’ 单引号
40 0010 1000 ( ‘(’ 左小括号
41 0010 1001 ) ‘)’ 右小括号
42 0010 1010 * ‘*’ 星号
43 0010 1011 + ‘+’ 加号
44 0010 1100 , ‘,’ 逗号
45 0010 1101 ‘-’ 减号
46 0010 1110 . ‘.’ 英文句号或小数点
47 0010 1111 / ‘/’ 斜杠
48 0011 0000 0 ‘0’ 数字0
49 0011 0001 1 ‘1’ 数字1
50 0011 0010 2 ‘2’ 数字2
51 0011 0011 3 ‘3’ 数字3
52 0011 0100 4 ‘4’ 数字4
53 0011 0101 5 ‘5’ 数字5
54 0011 0110 6 ‘6’ 数字6
55 0011 0111 7 ‘7’ 数字7
56 0011 1000 8 ‘8’ 数字8
57 0011 1001 9 ‘9’ 数字9
58 0011 1010 : ‘:’ 冒号
59 0011 1011 ; ‘;’ 分号
60 0011 1100 < ‘<’ 小于号
61 0011 1101 = ‘=’ 等于号
62 0011 1110 > ‘>’ 大于号
63 0011 1111 ? ‘?’ 问号
64 0100 0000 @ ‘@’ at符号
65 0100 0001 A ‘A’ 大写字符A
66 0100 0010 B ‘B’ 大写字符B
67 0100 0011 C ‘C’ 大写字符C
68 0100 0100 D ‘D’ 大写字符D
69 0100 0101 E ‘E’ 大写字符E
70 0100 0110 F ‘F’ 大写字符F
71 0100 0111 G ‘G’ 大写字符G
72 0100 1000 H ‘H’ 大写字符H
73 0100 1001 I ‘I’ 大写字符I
74 0100 1010 J ‘J’ 大写字符J
75 0100 1011 K ‘K’ 大写字符K
76 0100 1100 L ‘L’ 大写字符L
77 0100 1101 M ‘M’ 大写字符M
78 0100 1110 N ‘N’ 大写字符N
79 0100 1111 O ‘O’ 大写字符O
80 0101 0000 P ‘P’ 大写字符P
81 0101 0001 Q ‘Q’ 大写字符Q
82 0101 0010 R ‘R’ 大写字符R
83 0101 0011 S ‘S’ 大写字符S
84 0101 0100 T ‘T’ 大写字符T
85 0101 0101 U ‘U’ 大写字符U
86 0101 0110 V ‘V’ 大写字符V
87 0101 0111 W ‘W’ 大写字符W
88 0101 1000 X ‘X’ 大写字符X
89 0101 1001 Y ‘Y’ 大写字符Y
90 0101 1010 Z ‘Z’ 大写字符Z
91 0101 1011 [ ‘[’ 左中括号
92 0101 1100 \ ‘’ 反斜杠
93 0101 1101 ] ‘]’ 右中括号
94 0101 1110 ^ ‘^’ 音调符号(次方描述符)
95 0101 1111 _ ‘_’ 下划线
96 0110 0000 ` ‘`’ 重音符
97 0110 0001 a ‘a’ 小写字符a
98 0110 0010 b ‘b’ 小写字符b
99 0110 0011 c ‘c’ 小写字符c
100 0110 0100 d ‘d’ 小写字符d
101 0110 0101 e ‘e’ 小写字符e
102 0110 0110 f ‘f’ 小写字符f
103 0110 0111 g ‘g’ 小写字符g
104 0110 1000 h ‘h’ 小写字符h
105 0110 1001 i ‘i’ 小写字符i
106 0110 1010 j ‘j’ 小写字符j
107 0110 1011 k ‘k’ 小写字符k
108 0110 1100 l ‘l’ 小写字符l
109 0110 1101 m ‘m’ 小写字符m
110 0110 1110 n ‘n’ 小写字符n
111 0110 1111 o ‘o’ 小写字符o
112 0111 0000 p ‘p’ 小写字符p
113 0111 0001 q ‘q’ 小写字符q
114 0111 0010 r ‘r’ 小写字符r
115 0111 0011 s ‘s’ 小写字符s
116 0111 0100 t ‘t’ 小写字符t
117 0111 0101 u ‘u’ 小写字符u
118 0111 0110 v ‘v’ 小写字符v
119 0111 0111 w ‘w’ 小写字符w
120 0111 1000 x ‘x’ 小写字符x
121 0111 1001 y ‘y’ 小写字符y
122 0111 1010 z ‘z’ 小写字符z
123 0111 1011 { ‘{’ 左大括号
124 0111 1100 | ‘|’ 或符号
125 0111 1101 } ‘}’ 右大括号
126 0111 1110 ~ ‘~’ 代字号(波浪号)
127 0111 1111 DEL ‘□’ 删除(DELETE)
128 1000 0000 ‘€’ 欧元符号
129 1000 0001 ‘?’ 保留

1.3-1 Ascll码对应表

字符范围0-127与国际Ascll码表中的信息一一对应,比如数字10在国际Ascll码对应表中表示数据换行,在VS2010中输出:
    char a = 10;
    printf(“test %s.”, &a);
    得到输出结果:test烫烫烫烫
                             .
  从输出结果中可以看出,.换到了下一行(烫烫烫烫属于打印信息未做输出结尾处理的原因,后续字符串相关讲解)。
  字符数字范围128-255属于扩充字符,并非标准的ASCII码值,在不同的字符集中,扩充字符表示的意义也不相同。VS2010编译器默认采用GB2312编码,中文“烫”由两扩展个字节0xCC(204)、 0xCC组成。

目录预览

<一起学习C语言:C语言发展历程以及定制学习计划>
<一起学习C语言:初步进入编程世界(一)>
<一起学习C语言:初步进入编程世界(二)>
<一起学习C语言:初步进入编程世界(三)>
<一起学习C语言:C语言数据类型(一)>

一起学习C语言:C语言数据类型(二)相关推荐

  1. 如何学习C语言,超详细的经验分享(学习笔记1--C语言的基本数据类型)

    前言: 如果你正在学习C语言而又不知道从何处开始学,你可以跟着我一起学习C语言,在寒假期间我每天都会发一篇博客,里面有各种C语言的知识点,如果你想学习下去,想进步,就来每天跟着我一起打卡吧,期待我们能 ...

  2. Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器

    Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...

  3. 好好学习 天天编程—C语言之我的第一个hello world(二)

    好好学习 天天编程-C语言之我的第一个hello world(二)

  4. C语言学习--01 认识数据类型

    C语言学习--01 认识数据类型 #include<stdio.h> int main(){//sizeof 计算类型或者变量所占空间的大小printf("%d\n", ...

  5. 软硬件学习记录5—— Verilog语言中的数据类型

    Verilog语言中的数据类型 在 Verilog 语言中,主要有三大类数据类型:寄存器数据类型.线网数据类型和参数数据类型. 1.寄存器类型 reg 1.1 概述: 寄存器数据类型的关键字是 reg ...

  6. 《零基础看得懂的C语言入门教程 》——(四)C语言的基本数据类型及变量

    一.学习目标 了解C语言的基本数据类型 了解变量的基本概念 了解变量的使用方法 了解了变量的命名方法 了解格式占位符 了解变量的输出 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. ...

  7. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  8. C语言速看,C语言高速入门系列(二)

    C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...

  9. c语言z基本数据类型文档,C语言基本数据类型

    第2章基本数据类型.运算符与表达式,2.1C语言的数据类型2.2常量与变量2.3整型数据2.4实型数据2.5字符型数据2.6各类数据混合运算2.7C语言的运算符与表达式2.8运算符的优先级及其结合性, ...

  10. C 语言还值得学习吗?C 语言会过时吗?C 语言解惑

    C 语言还值得学吗? 答案是肯定的. 第一,学习C有助于更好的理解C++,Java,C#,Perl以及其他基于C的特性的语言.第一开始就学习其他语言的程序员往往不能很好的掌握继承自C语言的基本特性. ...

最新文章

  1. python gui界面设置数据储存在哪里_我整理的一些常用Python库!让你快速记住这些库的用法!建议收藏...
  2. MSSQL · 最佳实践 · 使用混合密钥实现列加密
  3. 编译linux-2.6.29内核,报错解决方法
  4. 使用promise解决回调地狱_使用Promise 解决回调地狱
  5. UE4笔记-进程/线程/网络/IO模块的相关问题记录
  6. win10浏览器_[系统] win10浏览器上网问题
  7. linux callback函数,C++回调函数(callback)的使用
  8. Java中线程池,你真的会用吗
  9. js使用base64 上传图片解决iOS手机竖屏拍摄图片发生旋转问题
  10. Java开发工具IntelliJ IDEA创建Andriod项目示例说明
  11. Zookeeper学习笔记01
  12. Linux下的TCP测试工具
  13. 魔方cfop公式软件_按这七步训练,你可以快速玩转魔方!
  14. 浅谈市场降温后的区块链发展前景
  15. vue 图片放大、缩小、旋转、滚轮操作图片放大缩小
  16. STATA如何保留和删除变量或者观测值
  17. 小龙虾壳做环保包装袋,用计算机视觉来远程监考……这些公司好好玩!
  18. python 人体检测技术_tensorflow入门教程(四十三)人体姿态检测(一)
  19. AudioManager音量控制
  20. 如何合并PDF文件?教你几种超简单的方法

热门文章

  1. 【集合】--List
  2. kali下载软件时出现“部分索引文件下载失败,如果忽略他们,那将转而使用旧的索引文件”
  3. [Qt] 迷宫随机生成和自动寻路算法、布局管理器、动态效果、界面切换、播放音频【迷宫、魔塔、超级玛丽】 -C++课程设计:Qt实现的迷宫与地牢游戏
  4. (字节流与字符流)OutputStream字节输出流
  5. Spring Boot Redis关闭
  6. 数据库|第一范式、第二范式、第三范式、BC范式、第四范式简单理解
  7. Java基础学习(9)
  8. vue js 复制div区域内容
  9. Linux使用vi修改、删除、保存文件
  10. RGB接口屏和SPI接口屏的引脚