前言:欢迎来到 Fountain芳腾 的博客,本文希望制作适合新手入门又可供有基础者提升的教程,若文中有错漏之处欢迎大家指正、补充。
第4节:变量类型
变量类型
我们认识了变量,知道变量是用来存放数据的,会占用空间。由于数据本身有多种类型,不同类型的数据代表不同的意义,有不同的操作,所以一个变量需要知道自己存储的是什么类型的数据,才知道如何去处理这些数据。C 语言的基本变量类型有整数型、浮点型、字符型、布尔型。
整数型
有符号数表示法
在数学中使用符号"+" 和 "-"来表示数字的正负,而计算机只能处理由 0 和 1 组成的二进制数据,因此需要一种能表示数字正负的编码方法。当前有四种方法用来表示有符号数:原码、反码、补码、移码。
- 原码:二进制数在存储单元最高位加上符号值后得到的编码即为原码,符号位为 0 代表正数、符号位为 1 代表负数。二进制数等于 0 时,符号位可为 0 也可为 1,代表 ±0。例如在 8 位存储单元中,10(二进制:1010)的原码为 0000,1010,-10 的原码为 1000,1010。
- 反码:反码通常是由原码求补码或由补码求原码的过渡码,正数(包括 +0)的反码等于其原码,负数(包括 -0)的反码为在其原码的基础上符号位不变其余位进行取反。例如在 8 位存储单元中,-10 的原码为 1000,1010,反码为 1111,0101。
- 补码:计算机最终使用补码的形式存储整数,正数和 0 的补码等于其原码,负数的补码为其反码的基础上加 1。例如在 8 位存储单元中,-10 的反码为 1111,0101,补码为 1111,0110。
- 移码:不需要符号位,而是将原值加上一个偏移量使得编码值大于等于 0 的编码方式。移码没有标准,对于 n 位存储单元,通常将中位数 K = 2n−1 映射为 0,该中位数即偏移量,一个二进制数加上偏移量便可得到移码,大于偏移量即为正数,小于偏移量即为负数。
练习:由补码计算取值
计算机使用补码存储整数,根据补码的定义可知,由补码计算取值,首先看最高位,如果是 0 则不需要转换就能得到一个二进制正数,如果是 1 则需要减 1 后进行按位取反就得到一个二进制负数的绝对值。
请计算以下补码的取值:0000,0000、1000,0000、1111,1111、0111,1111。
扩展:补码原理
(前往链接)
整数取值范围
存储单元的大小决定了其可取值的范围。对于一个 n 字节的整型单元,共有 2n 种取值,符号位占 1 位,绝对值共有 2n-1 种取值。正数从 0 开始,最大值为 2n-1-1。负数从 -1 开始,最小值为 -2n