进制,变量,常量,浮点数

本文详细介绍了二进制、十进制、十六进制之间的转换,以及它们在计算机中的存储和表达范围。同时,讨论了C语言中的常量,包括整数常量(十进制、十六进制、八进制)、浮点数常量和字符常量。还提到了ASCII编码和转义字符的概念,以及字符串常量的特性。
摘要由CSDN通过智能技术生成

从二进制开始

二进制(binary)是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上都是二进制系统。

 二进制的原理:

每一位二进制就如晶体管中的一个晶体,是一个非常微小的开关,用“开”来表示1,“关”来表示0。

a)每增加一个晶体,表达的数字个数乘2,相加时每逢2进1;

b)1个二进制数表达的是0和1的两种数字,2个二进制数表达的是0到3之间四种数字,3个二进制数表达的是0到7之间的八种数字,4个二进制数表达的是0到15之间的十六种数字,依此类推;

c)二进制尾部每加一个0相当于乘以2;十进制尾部每加一个0相当于乘以10;

d)2的常见倍数:1 2 4 8 16 32 64 128 256 512 1024 2048 4096……

二进制转换为十进制:

将二进制转为十进制的方法:每一位数字乘以对应的倍数。

表2-1 常见的二进制与十进制的对应表:

二进制

十进制

二进制

十进制

二进制

十进制

二进制

十进制

0

0

1

1

10

2

11

3

100

4

101

5

110

6

111

7

1000

8

1001

9

1010

10

1011

11

1100

12

1101

13

1110

14

1111

15

例如:

1001 = 1*8+0*4 + 0*2 + 1 => 8+1=9  9+1  =>1010 (1001+1=1010)

1011 = 1*8+0*4 + 1*2 + 1 => 8+2+1=11 11+1 =>1100 (1011+1=1100)

1111 = 1*8+1*4+1*2+1 = 8+4+2+1 = 15 15+1 =>10000 (1111+1=10000)

11111 = 1*16+1*8+1*4+1*2+1 = 31 31 + 1 =>100000 (11111+1=100000)

十进制转换为二进制:

a)肉眼快速识别:拿一些2的常见倍数的数字来试探,比如:35 32 +2 +1 = 100011;

b)科学的计算方法:让个位对2取余数得出是1还是0 ,对其他位除以对应的2的倍数;

c)2的n次方:二进制是一个1后面到n个0,就是2的n次方。例如:100 是4 1000是8;

d)2的n次方减1:由n个1组成。例如:111是7(2的3次方减1) 1111是15(2的4次方减1)。

十进制的拆分是每次除以10再对10取余数,例如:

135 = 1*100 + 3*10 + 5;

2649 = 2*1000 + 6*100 + 4* 10 + 9

对以上数字进行二进制转换,则是每次除以2再对2取余数。例如:

135先对2取余数等于1就是二进制的个位,135除以2等于67再对2取余数还是1就是二进制的十位数……

依此类推,每除以一个2就是高一位的二进制数,最后直到除尽为零,得到了全部的二进制数字的转换。

135=10000111(1+1*2+1*4+0*8+0*16+……+1*128)

二进制位数与数值表达范围:

如果把每一位二进制数,看成一个晶体管内的晶体的话,每个晶体都有一开一关两种状态。

1个晶体可表达0或1两种数字;

2个晶体可表达4种数字,分别为:00 01 10 11;

3个晶体可表达8种数字:000 001 010 011 100 101 110 111;

4个晶体可表达16种数字:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111;

5个晶体可表达32种数字:0-31之间,例如:10000是16,11111是31;

依此类推……

8个晶体可表达256种数字:0-255之间,例如:1001 1101是157;

依此类推……

16个晶体可表达65536(64K)种数字:0-65535之间,例如:1111111111111111(16个1)是65535;

依此类推……

32个晶体可可表达4294967296(4G)个数字:0到 4294967295个数字,例如:

11111111111111111111111111111111(32个1)是4294967295。

计算机常用数值单位:

计算机常用的数值单位包括:K、M、G等等。

1K=1024,例如:2K就是2048,4K就是4096,依此类推……

1M=1024K,也就是1M=1024*1024,例如:5M就是5*1024*1024,依此类推……

1G=1024M,也就是1G=1024*1024*1024,例如:4G就是4294967296(4*1024*1024*1024)……

1T=1024G,也就是1T=1024*1024*1024*1024,例如:2T就是2048G,50T就是51200G依此类推……

十六进制

二进制最真实地反映了数据在计算机中的存储格式,但是二进制书写起来却是太过冗长了。4个二进制位可表达的刚好是0-15之间的16种数值,这就是十六进制的方便之处。十六进制的特点是,既贴近计算机硬件的实际数据存储格式,又比二进制和十进制都节省位数,容易书写和辨认。

十六进制(Hexadecimal)是由0-9,A-F总共16种数值和字母组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9,A-F对应10-15。

十六进制与二进制的转换:

每个十六进制数字都是跟4位二进制的数字是等价的关系,按照这个方法,即使有很多位十六进制数字也能快速地换算成对应的二进制数值。反过来,即使有很多位二进制数字也能快速地换算成十六进制数,只要将每4位二进制合成1位十六进制即可。例如:

15 => x0F => 0000 1111

16 => x10 => 0001 0000

17 => x11 => 0001 0001

18 => x12 => 0001 0010

25 => x19 => 0001 1001

26 => x1A =>0001 1010

30 => x1E =>0001 1110

31 => x1F =>0001 1111

32 => x20 => 0010 0000

十六进制与十进制的转换:

在一个十六进制数字的尾部每次多加一个0代表这个数字乘以16,就如同十进制的尾部每次多加一个0代表乘以10。十六进制转换为十进制比较容易,十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方,依此类推……例如:

十六进制的20代表十进制的:2×16¹+0×16º=32

十六进制的A5代表十进制的:10×16¹+5=165

十六进制的100代表十进制的:16×16=256

十六进制的23F代表十进制的:2×16×16+3×16+15=575

依此类推……

十进制转换为十六进制的方法,与十进制转换为二进制的方法类似。十进制转换为二进制的方法是,每次除以一个2的倍数再对2取余数;十进制转换位十六进制的方法是,每次除以一个16再对16取余数。

例如:十进制130转换为十六进制时,先把130对16取余数得到个位是2,再对130除以16得到高位是8,结果是x82。

字节(Byte)与位(Bit)

通常所说位就是二进制的1个位,只能表达0或1两种数字,是计算机存储信息的最小单位,称之为位(bit),音译比特。

每8个位(bit,简写为b)组成一个字节(Byte,简写为B),字节是计算机信息技术中最常的一种计量单位。数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit)为单位。

十六进制数中每一位,刚好可以表达的是4位的二进制数。一个字节是8位,刚好可以用2个十六进制数来表达。例如:

64 => x40 => 0100 0000

81 => x51 => 0101 0001

128 =>x80 => 1000 0000

130 =>x82 => 1000 0010

200 =>xC8 => 1100 1000

250 =>xFA => 1111 1010

254 =>xFE => 1111 1110

255 =>xFF => 1111 1111

1个字节的数字也叫8位数,2个字节的数字也叫16位数,刚好用4个十六进制数来表达,4个字节的数字也叫32位数,刚好用8个十六进制数来表达。例如:

32767 =>x7FFF =>0111 1111 1111 1111

4294967295 =>xFFFFFFFF =>1111 1111 1111 1111 1111 1111 1111 1111

C语言常量

常量是指在程序运行时,不会被修改的量。通俗地说,常量就是指C语言中各种数字的表达式。C语言常量包括:整数常量、浮点数常量、字符常量和字符串常量。

整数常量

整数常量的表达方法包括:十进制表达式、十六进制表达式、八进制表达式等。(注意:C语言并没有提供二进制常量表达式)

a)十进制表达式:和普通数字的表达方法一致。例如:13,28,-52,-1000等等;

b)十六进制表达式:以0x开头。例如:0xA1,0xC8,-0x20,-0x500等等;

c)八进制表达式:以0开头。例如:032,-011,081(错误)等。

注意:0开头的常量看上去好像是十进制,其实已经是八进制了,八进制中只有0-7之间的数字,8和9都错误的代码。

为什么本节标题以“C语言”开头?因为前两节讲解的内容是数制与计量单位等,是公用理论,其他任何计算机语言都支持。从本节开始,我们讲解的内容将进入C语言代码编写的范畴。

[例2-1]八进制(没有8):0 – 7;十进制(没有10):0 - 9;十六进制(没有16):0 - F

#include <stdio.h>

int main()

{

int i = 0000500;

int j = 0x260;

printf("i=%d\n",i);

printf("j=%d\n",j);

return 0;

}

将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:

a)反复修改代码(分别用三种进制的整数对i和j进行赋值)再进行编译和运行,观察打印的结果对各种进制的转换是否正确;

b)尤其注意,在八进制数字中加入8和9是否编译会出错,以及在十进制种加入A到F是否编译会出错。

浮点数常量

浮点数常量,通俗地说就是带小数点的数字,表达式的中必须含有小数点,即使小数部分是0也要缺省带小数点。浮点数常量主要有两种表达式:

a)单精度浮点数:尾部带f的浮点数代表是单精度浮点数。例如:0.5f,88.2f,-55.0f等;

b)双精度浮点数:尾部不带f的浮点数代表是双精度浮点数。例如:0.0,0.88,99.5,-111.356等。

一般认为双精度浮点数比单精度浮点数表达的范围要大很多,包括整数部分和小数部分,双精度表达的数字长度要大很多。

将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:

a)观察单精度与双精度浮点数,打印出来的整数部分和小数部分是否有损失;

b)最好能在程序运行过程中,在监视器中观测f和d变量中数据的完整性。

字符常量

字符常量,是由一对单引号将一个字符括起来的构成,每种被括起来不同的字符代表一个不同的数字。就如同每个学生有不同的名字,而且还有个不同的学号一样。

例如:char c = 'A';

‘A’代表的是一个数字65,因为在ASCII编码表中A的数值是65,依此类推:‘ B’代表66,’a’代表97,‘X’代表88,’5’代表53,‘=‘代表61,’|’代表124,’  ‘空格代表32等等。

因此,字符常量实际上也是一种整数常量,只不过字符常量所表达的范围比较小而已。

uploading.4e448015.gif

转存失败重新上传取消

ASCII编码表

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言,它是现今最通用的单字节编码系统。

所有字符与数值的对照表就是ASCII编码表,作为字符常量使用的ASCII编码主要是使用0-127范围内的数字。其中0~31及127(共33个)是控制字符或通信专用字符,其余为可显示字符。

ASCII控制字符:

二进制

十进制

</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值