d7编程
① 8086的d0-d15怎么接8253d0-d7
8086的 D0~D7 连接8283的D0~D7,
正因如此,8253的定时/计数器的16位计数初值要两次传送,请参考以下例子:
设8253A的端口地址为7A0H~7A3H,计数器2#工作于方式3,计数初值为8000,
试写出8253A的控制字,并对其进行初始化编程.
MOV AL, 10110110b ;控制字
OUT 7A3, AL ;控制字写入控制寄存器
MOV AX, 8000 ;16位计数初值
OUT 7A2, AL ;计数初值低8位写入定时/计数器2
MOV AL, AH ;计数初值高8位送入AL
OUT 7A2, AL ;计数初值高8位写入定时/计数器2
② delphi学习哪个版本较好
如果你是专注于windows下的单机编程,那d7不错,如果以后想要接触网络编程,那d2007也行
书嘛要从易到难,简单级的都差不多,稍有点深度的是刘易写的《delphi面向对象编程》和《delphi模式编程》,推荐前者~
③ D7编程中自己编写功能块时如何取得循环时间
功能块只有在被调用时才可能知道在Tx中,但编程功能块时必须主动读取采样时间,否则功能块只能在某个时间中断中调用就不具备通用性了。
④ LCD1602 为画PCB方便 把LCD的D0-D7口分别接到了P0.7-P0.0 怎么编程
写一个Port IO顺序转换函数
void PortIO_Trans (unsigned char Port0_Temp)
{
bit Port0_0,Port0_1,Port0_2,Port0_3,
Port0_4,Port0_5,Port0_6,Port0_7;
Port0_0 = Port0_Temp & 0x80;
Port0_1 = Port0_Temp & 0x40;
Port0_2 = Port0_Temp & 0x20;
Port0_3 = Port0_Temp & 0x10;
Port0_4 = Port0_Temp & 0x08;
Port0_5 = Port0_Temp & 0x04;
Port0_6 = Port0_Temp & 0x02;
Port0_7 = Port0_Temp & 0x01;
WR = 0;
P0^0 = Port0_0 ;
P0^1 = Port0_1;
P0^2 = Port0_2;
P0^3 = Port0_3;
P0^4 = Port0_4;
P0^5 = Port0_5;
P0^6 = Port0_6;
P0^7 = Port0_7;
WR = 1;
}
不知道是不是你的意思,你先试试,有问题再说,希望能帮上忙
⑤ 关于EXCEL表格编程
用公式:
=INDEX(Sheet1!C5:G10,MATCH("综合厂用电量",Sheet1!A5:A10,),MATCH("本月",C4:G4,))
⑥ 检测卡 d7 是什么意思啊
C0:开机检测代码显示C0,这为主板BIOS故障或者主板芯片已坏
C1:C1本为检测是否内存通过,停止即为不过,但是主板也有故障嫌疑的
C3:内存问题D3、D4:此都为内存问题,但是主板内存插槽也有可能,多数出在AMD的板上,这时可以把CPU风扇拿出来,上紧CPU再进行通电测
试
25: 25为显卡或插槽问题,一般清过主板BIOS就能亮机。不然就换过显卡
26或者2b:亮机,不亮机考虑显卡
31:显卡或插槽问题
45:显卡问题
00:刚开机就直接到00或者FF是CPU或者主板芯片坏
FF:刚开机就直接到00或者FF是CPU或者主板芯片坏,也可能是供电不足(20楼提出,表示感谢)
13:在AMI BIOS13是正常
75:BIOS故障,重设BIOS即可
00:开机代码转到最后显示为这个为正常已经亮机
FF:开机代码转到最后显示为这个为正常已经亮机
05 如果不断重复制造测试1至5,可获得8042控制状态。 已确定软复位/通电;即将启动ROM。 DMA初如准备正在进行或者失灵。
06 使电路片作初始准备,停用视频、奇偶性、DMA电路片,以及清除DMA电路片,所有页面寄存器和CMOS停机字节。 已启动ROM计算ROM BIOS检
查总和,以及检查键盘缓冲器是否清除。 DMA初始页面寄存器读/写测试正在进行或失灵。 武汉柯蓝电脑上门维修电话027-63898512
07 处理器测试2,核实CPU寄存器的工作。 ROM BIOS检查总和正常,键盘缓冲器已清除,向键盘发出BAT(基本保证测试)命令。 . 武汉柯南
电脑上门维修电话027-63898512
08 使CMOS计时器作初始准备,正常的更新计时器的循环。 已向键盘发出BAT命令,即将写入BAT命令。 RAM更新检验正在进行或失灵。 武汉柯
澜电脑上门维修电话027-63898512
09 EPROM检查总和且必须等于零才通过。 核实键盘的基本保证测试,接着核实键盘命令字节。 第一个64K RAM测试正在进行。 武汉科南电脑
上门维修电话027-63898512
0A 使视频接口作初始准备。 发出键盘命令字节代码,即将写入命令字节数据。 第一个64K RAM芯片或数据线失灵,移位。
0B 测试8254通道0。 写入键盘控制器命令字节,即将发出引脚23和24的封锁/解锁命令。 第一个64K RAM奇/偶逻辑失灵。 武汉柯南电脑上
门维修电话027-63898512
0C 测试8254通道1。 键盘控制器引脚23、24已封锁/解锁;已发出NOP命令。 第一个64K RAN的地址线故障。
0D 1、检查CPU速度是否与系统时钟相匹配。2、检查控制芯片已编程值是否符合初设置。3、视频通道测试,如果失败,则鸣喇叭。 已处理NOP
命令;接着测试CMOS停开寄存器。 第一个64K RAM的奇偶性失灵
0E 测试CMOS停机字节。 CMOS停开寄存器读/写测试;将计算CMOS检查总和。 初始化输入/输出端口地址。
0F 测试扩展的CMOS。 已计算CMOS检查总和写入诊断字节;CMOS开始初始准备。 .
10 测试DMA通道0。 CMOS已作初始准备,CMOS状态寄存器即将为日期和时间作初始准备。 第一个64K RAM第0位故障。
11 测试DMA通道1。 CMOS状态寄存器已作初始准备,即将停用DMA和中断控制器。 第一个64DK RAM第1位故障。
12 测试DMA页面寄存器。 停用DMA控制器1以及中断控制器1和2;即将视频显示器并使端口B作初始准备。 第一个64DK RAM第2位故障。
13 测试8741键盘控制器接口。 视频显示器已停用,端口B已作初始准备;即将开始电路片初始化/存储器自动检测。 第一个64DK RAM第3位故
障。
14 测试存储器更新触发电路。 电路片初始化/存储器处自动检测结束;8254计时器测试即将开始。 第一个64DK RAM第4位故障。
15 测试开头64K的系统存储器。 第2通道计时器测试了一半;8254第2通道计时器即将完成测试。 第一个64DK RAM第5位故障。
16 建立8259所用的中断矢量表。 第2通道计时器测试结束;8254第1通道计时器即将完成测试。 第一个64DK RAM第6位故障。
17 调准视频输入/输出工作,若装有视频BIOS则启用。 第1通道计时器测试结束;8254第0通道计时器即将完成测试。 第一个64DK RAM第7位
故障。
18 测试视频存储器,如果安装选用的视频BIOS通过,由可绕过。 第0通道计时器测试结束;即将开始更新存储器。 第一个64DK RAM第8位故障
。
19 测试第1通道的中断控制器(8259)屏蔽位。 已开始更新存储器,接着将完成存储器的更新。 第一个64DK RAM第9位故障。
1A 测试第2通道的中断控制器(8259)屏蔽位。 正在触发存储器更新线路,即将检查15微秒通/断时间。 第一个64DK RAM第10位故障。
1B 测试CMOS电池电平。 完成存储器更新时间30微秒测试;即将开始基本的64K存储器测试。 第一个64DK RAM第11位故障。
1C 测试CMOS检查总和。 . 第一个64DK RAM第12位故障。
1D 调定CMOS配置。 . 第一个64DK RAM第13位故障。
1E 测定系统存储器的大小,并且把它和CMOS值比较。 . 第一个64DK RAM第14位故障。
1F 测试64K存储器至最高640K。 . 第一个64DK RAM第15位故障。
20 测量固定的8259中断位。 开始基本的64K存储器测试;即将测试地址线。 从属DMA寄存器测试正在进行或失灵。
21 维持不可屏蔽中断(NMI)位(奇偶性或输入/输出通道的检查)。 通过地址线测试;即将触发奇偶性。 主DMA寄存器测试正在进行或失灵
。
22 测试8259的中断功能。 结束触发奇偶性;将开始串行数据读/写测试。 主中断屏蔽寄存器测试正在进行或失灵。
23 测试保护方式8086虚拟方式和8086页面方式。 基本的64K串行数据读/写测试正常;即将开始中断矢量初始化之前的任何调节。 从属中断
屏蔽存器测试正在进行或失灵。
24 测定1MB以上的扩展存储器。 矢量初始化之前的任何调节完成,即将开始中断矢量的初始准备。 设置ES段地址寄存器注册表到内存高端。
25 测试除头一个64K之后的所有存储器。 完成中断矢量初始准备;将为旋转式断续开始读出8042的输入/输出端口。 装入中断矢量正在进行
或失灵。
26 测试保护方式的例外情况。 读出8042的输入/输出端口;即将为旋转式断续开始使全局数据作初始准备。 开启A20地址线;使之参入寻址
。
27 确定超高速缓冲存储器的控制或屏蔽RAM。 全1数据初始准备结束;接着将进行中断矢量之后的任何初始准备。 键盘控制器测试正在进行或
失灵。
28 确定超高速缓冲存储器的控制或者特别的8042键盘控制器。 完成中断矢量之后的初始准备;即将调定单色方式。 CMOS电源故障/检查总和
计算正在进行。
29 . 已调定单色方式,即将调定彩色方式。 CMOS配置有效性的检查正在进行。
2A 使键盘控制器作初始准备。 已调定彩色方式,即将进行ROM测试前的触发奇偶性。 置空64K基本内存。
2B 使磁盘驱动器和控制器作初始准备。 触发奇偶性结束;即将控制任选的视频ROM检查前所需的任何调节。 屏幕存储器测试正在进行或失灵
。
2C 检查串行端口,并使之作初始准备。 完成视频ROM控制之前的处理;即将查看任选的视频ROM并加以控制。 屏幕初始准备正在进行或失灵。
2D 检测并行端口,并使之作初始准备。 已完成任选的视频ROM控制,即将进行视频ROM回复控制之后任何其他处理的控制。 屏幕回扫测试正在
进行或失灵。
2E 使硬磁盘驱动器和控制器作初始准备。 从视频ROM控制之后的处理复原;如果没有发现EGA/VGA就要进行显示器存储器读/写测试。 检测
视频ROM正在进行。
2F 检测数学协处理器,并使之作初始准备。 没发现EGA/VGA;即将开始显示器存储器读/写测试。 .
30 建立基本内存和扩展内存。 通过显示器存储器读/写测试;即将进行扫描检查。 认为屏幕是可以工作的。
31 检测从C800:0至EFFF:0的选用ROM,并使之作初始准备。 显示器存储器读/写测试或扫描检查失败,即将进行另一种显示器存储器读/写
测试。 单色监视器是可以工作的。
32 对主板上COM/LTP/FDD/声音设备等I/O芯片编程使之适合设置值。 通过另一种显示器存储器读/写测试;却将进行另一种显示器扫描检
查。 彩色监视器(40列)是可以工作的。
33 . 视频显示器检查结束;将开始利用调节开关和实际插卡检验显示器的关型。 彩色监视器(80列)是可以工作的。 武汉MP3/MP4批发零售
热线027-63898512
34 . 已检验显示器适配器;接着将调定显示方式。 计时器滴答声中断测试正在进行或失灵。
35 . 完成调定显示方式;即将检查BIOS ROM的数据区。 停机测试正在进行或失灵。
36 . 已检查BIOS ROM数据区;即将调定通电信息的游标。 门电路中A-20失灵。
37 . 识别通电信息的游标调定已完成;即将显示通电信息。 保护方式中的意外中断。
38 . 完成显示通电信息;即将读出新的游标位置。 RAM测试正在进行或者地址故障>FFFFH。
39 . 已读出保存游标位置,即将显示引用信息串。 .
3A . 引用信息串显示结束;即将显示发现<ESC>信息。 间隔计时器通道2测试或失灵。
3B 用OPTI电路片(只是486)使辅助超高速缓冲存储器作初始准备。 已显示发现<ESC>信息;虚拟方式,存储器测试即将开始。 按日计算的
日历时钟测试正在进行或失灵。
3C 建立允许进入CMOS设置的标志。 . 串行端口测试正在进行或失灵。
3D 初始化键盘/PS2鼠标/PNP设备及总内存节点。 . 并行端口测试正在进行或失灵。
3E 尝试打开L2高速缓存。 . 数学协处理器测试正在进行或失灵。
40 . 已开始准备虚拟方式的测试;即将从视频存储器来检验。 调整CPU速度,使之与外围时钟精确匹配。
41 中断已打开,将初始化数据以便于0:0检测内存变换(中断控制器或内存不良) 从视频存储器检验之后复原;即将准备描述符表。 系统插
件板选择失灵。
42 显示窗口进入SETUP。 描述符表已准备好;即将进行虚拟方式作存储器测试。 扩展CMOS RAM故障。
43 若是即插即用BIOS,则串口、并口初始化。 进入虚拟方式;即将为诊断方式实现中断。 .
44 . 已实现中断(如已接通诊断开关;即将使数据作初始准备以检查存储器在0:0返转。) BIOS中断进行初始化。 武汉笔记本电脑-MP3-MP4
批发零售热线027-63898512
45 初始化数学协处理器。 数据已作初始准备;即将检查存储器在0:0返转以及找出系统存储器的规模。 .
46 . 测试存储器已返回;存储器大小计算完毕,即将写入页面来测试存储器。 检查只读存储器ROM版本。
47 . 即将在扩展的存储器试写页面;即将基本640K存储器写入页面。 .
48 . 已将基本存储器写入页面;即将确定1MB以上的存储器。 视频检查,CMOS重新配置。
49 . 找出1BM以下的存储器并检验;即将确定1MB以上的存储器。 .
4A . 找出1MB以上的存储器并检验;即将检查BIOS ROM数据区。 进行视频的初始化。
4B . BIOS ROM数据区的检验结束,即将检查<ESC>和为软复位清除1MB以上的存储器。 .
4C . 清除1MB以上的存储器(软复位)即将清除1MB以上的存储器. 屏蔽视频BIOS ROM。.
4D 已清除1MB以上的存储器(软复位);将保存存储器的大小。 .
4E 若检测到有错误;在显示器上显示错误信息,并等待客户按<F1>键继续。 开始存储器的测试:(无软复位);即将显示第一个64K存储器
的测试。 显示版权信息。
4F 读写软、硬盘数据,进行DOS引导。 开始显示存储器的大小,正在测试存储器将使之更新;将进行串行和随机的存储器测试。 .
武汉网站策划建设后期维护推广热线电话027-63898512
50 将当前BIOS监时区内的CMOS值存到CMOS中。 完成1MB以下的存储器测试;即将高速存储器的大小以便再定位和掩蔽。 将CPU类型和速度送到
屏幕。
51 . 测试1MB以上的存储器。 .
52 所有ISA只读存储器ROM进行初始化,最终给PCI分配IRQ号等初始化工作。 已完成1MB以上的存储器测试;即将准备回到实址方式。 进入键
盘检测。
53 如果不是即插即用BIOS,则初始化串口、并口和设置时种值。 保存CPU寄存器和存储器的大小,将进入实址方式。 . 武汉笔记本电脑-MP3
-MP4批发零售热线027-63898512
54 . 成功地开启实址方式;即将复原准备停机时保存的寄存器。 扫描“打击键”
55 . 寄存器已复原,将停用门电路A-20的地址线。 .
56 . 成功地停用A-20的地址线;即将检查BIOS ROM数据区。 键盘测试结束。
57 . BIOS ROM数据区检查了一半;继续进行。 .
58 . BIOS ROM的数据区检查结束;将清除发现<ESC>信息。 非设置中断测试。
59 . 已清除<ESC>信息;信息已显示;即将开始DMA和中断控制器的测试。 .
5A . . 显示按“F2”键进行设置。
5B . . 测试基本内存地址。
5C . . 测试640K基本内存。
60 设置硬盘引导扇区病毒保护功能。 通过DMA页面寄存器的测试;即将检验视频存储器。 测试扩展内存。
61 显示系统配置表。 视频存储器检验结束;即将进行DMA#1基本寄存器的测试。 .
62 开始用中断19H进行系统引导。 通过DMA#1基本寄存器的测试;即将进行DMA#2寄存器的测试。 测试扩展内存地址线。 武汉kelan电脑笔
记本优惠批发零售购买团购服务电话027-63898512
63 . 通过DMA#2基本寄存器的测试;即将检查BIOS ROM数据区。 .
64 . BIOS ROM数据区检查了一半,继续进行。 .
65 . BIOS ROM数据区检查结束;将把DMA装置1和2编程。 .
66 . DMA装置1和2编程结束;即将使用59号中断控制器作初始准备。 Cache注册表进行优化配置。
67 . 8259初始准备已结束;即将开始键盘测试。 .
68 . . 使外部Cache和CPU内部Cache都工作。
6A . . 测试并显示外部Cache值。
6C . . 显示被屏蔽内容。
6E . . 显示附属配置信息。
70 . . 检测到的错误代码送到屏幕显示。
72 . . 检测配置有否错误。
74 . . 测试实时时钟。
76 . . 扫查键盘错误。
7A . . 锁键盘。
7C . . 设置硬件中断矢量。
7E . . 测试有否安装数学处理器。
80 . 键盘测试开始,正在清除和检查有没有键卡住,即将使键盘复原。 关闭可编程输入/输出设备。
81 . 找出键盘复原的错误卡住的键;即将发出键盘控制端口的测试命令。 .
82 . 键盘控制器接口测试结束,即将写入命令字节和使循环缓冲器作初始准备。 检测和安装固定RS232接口(串口)。
83 . 已写入命令字节,已完成全局数据的初始准备;即将检查有没有键锁住。 .
84 . 已检查有没有锁住的键,即将检查存储器是否与CMOS失配。 检测和安装固定并行口。
85 . 已检查存储器的大小;即将显示软错误和口令或旁通安排。 .
86 . 已检查口令;即将进行旁通安排前的编程。 重新打开可编程I/O设备和检测固定I/O是否有冲突。
87 . 完成安排前的编程;将进行CMOS安排的编程。 .
88 . 从CMOS安排程序复原清除屏幕;即将进行后面的编程。 初始化BIOS数据区。
89 . 完成安排后的编程;即将显示通电屏幕信息。 .
8A . 显示头一个屏幕信息。 进行扩展BIOS数据区初始化。
8B . 显示了信息:即将屏蔽主要和视频BIOS。 .
8C . 成功地屏蔽主要和视频BIOS,将开始CMOS后的安排任选项的编程。 进行软驱控制器初始化。
8D . 已经安排任选项编程,接着检查滑了鼠和进行初始准备。 .
8E . 检测了鼠标以及完成初始准备;即将把硬、软磁盘复位。 .
8F . 软磁盘已检查,该磁盘将作初始准备,随后配备软磁盘。 .
90 . 软磁盘配置结束;将测试硬磁盘的存在。 硬盘控制器进行初始化。
91 . 硬磁盘存在测试结束;随后配置硬磁盘。 局部总线硬盘控制器初始化。
92 . 硬磁盘配置完成;即将检查BIOS ROM的数据区。 跳转到用户路径2。
93 . BIOS ROM的数据区已检查一半;继续进行。 .
94 . BIOS ROM的数据区检查完毕,即调定基本和扩展存储器的大小。 关闭A-20地址线。
95 . 因应鼠标和硬磁盘47型支持而调节好存储器的大小;即将检验显示存储器。 .
96 . 检验显示存储器后复原;即将进行C800:0任选ROM控制之前的初始准备。 “ES段”注册表清除。
97 . C800:0任选ROM控制之前的任何初始准备结束,接着进行任选ROM的检查及控制。 .
98 . 任选ROM的控制完成;即将进行任选ROM回复控制之后所需的任何处理。 查找ROM选择。
99 . 任选ROM测试之后所需的任何初始准备结束;即将建立计时器的数据区或打印机基本地址。 .
9A . 调定计时器和打印机基本地址后的返回操作;即调定RS-232基本地址。 屏蔽ROM选择。
9B . 在RS-232基本地址之后返回;即将进行协处理器测试之初始准备。 .
9C . 协处理器测试之前所需初始准备结束;接着使协处理器作初始准备。 建立电源节能管理。
9D . 协处理器作好初始准备,即将进行协处理器测试之后的任何初始准备。 .
9E . 完成协处理器之后的初始准备,将检查扩展键盘,键盘识别符,以及数字锁定。 开放硬件中断。
9F . 已检查扩展键盘,调定识别标志,数字锁接通或断开,将发出键盘识别命令。 .
A0 . 发出键盘识别命令;即将使键盘识别标志复原。 设置时间和日期。
A1 . 键盘识别标志复原;接着进行高速缓冲存储器的测试。 .
A2 . 高速缓冲存储器测试结束;即将显示任何软错误。 检查键盘锁。
A3 . 软错误显示完毕;即将调定键盘打击的速率。 .
A4 . 调好键盘的打击速率,即将制订存储器的等待状态。 键盘重复输入速率的初始化。
A5 . 存储器等候状态制定完毕;接着将清除屏幕。 .
A6 . 屏幕已清除;即将启动奇偶性和不可屏蔽中断。 .
A7 . 已启用不可屏蔽中断和奇偶性;即将进行控制任选的ROM在E000:0之所需的任何初始准备。 .
A8 . 控制ROM在E000:0之前的初始准备结束,接着将控制E000:0之后所需的任何初始准备。 清除“F2”键提示。 武汉笔记本电脑-MP3-MP4
批发零售热线027-63898512
A9 . 从控制E000:0 ROM返回,即将进行控制E000:0任选ROM之后所需的任何初始准备。 .
AA . 在E000:0控制任选ROM之后的初始准备结束;即将显示系统的配置。 扫描“F2”键打击。
AC . . 进入设置.
AE . . 清除通电自检标志。
B0 . . 检查非关键性错误。
B2 . . 通电自检完成准备进入操作系统引导。
B4 . . 蜂鸣器响一声。
B6 . . 检测密码设置(可选)。
B8 . . 清除全部描述表。
BC . . 清除校验检查值。
BE 程序缺省值进入控制芯片,符合可调制二进制缺省值表。 . 清除屏幕(可选)。
BF 测试CMOS建立值。 . 检测病毒,提示做资料备份。
C0 初始化高速缓存。 . 用中断19试引导。
C1 内存自检。 . 查找引导扇区中的“55”“AA”标记。
C3 第一个256K内存测试。 . .
C5 从ROM内复制BIOS进行快速自检。 . .
C6 高速缓存自检。 . .
CA 检测Micronies超速缓冲存储器(如果存在),并使之作初始准备。 . .
CC 关断不可屏蔽中断处理器。 . .
EE 处理器意料不到的例外情况。 . .
FF 给予INI19引导装入程序的控制,主板OK。
⑦ 编程的进制有多少种分别是怎样计算的举例说明!
2、8、10、16进制转换方法 生活中其实很多地方的计数方法都多少有点不同进制的影子。 比如我们最常用的10进制,其实起源于人有10个指头。如果我们的祖先始终没有摆脱手脚不分的境况,我想我们现在一定是在使用20进制。 至于二进制……没有袜子称为0只袜子,有一只袜子称为1只袜子,但若有两袜子,则我们常说的是:1双袜子。 生活中还有:七进制,比如星期。十六进制,比如小时或“一打”,六十进制,比如分钟或角度…… 我们找到问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '\77'来表示'?'。由于是八进制,所以本应写成 '\077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。 事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,6.2.4小节的内容,大家仅仅了解就行。 6.2.5 十六进制数转换成十进制数 2进制,用两个阿拉伯数字:0、1; 8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7; 10进制,用十个阿拉伯数字:0到9; 16进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了10个数字啊? 16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。 十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方…… 所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。 假设有一个十六进数 2AF5, 那么如何换算成10进制呢? 用竖式计算: 2AF5换算成10进制: 第0位: 5 * 16^0 = 5 第1位: F * 16^1 = 240 第2位: A * 16^2 = 2560 第3位: 2 * 16^3 = 8192 + ------------------------------------- 10997 直接计算就是: 5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997 (别忘了,在上面的计算中,A表示10,而F表示15) 现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。 假设有人问你,十进数 1234 为什么是 一千二百三十四?你尽可以给他这么一个算式: 1234 = 1 * 10^3 + 2 * 10^2 + 3 * 10^1 + 4 * 10^0 6.2.6 十六进制数的表达方法 如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。 C,C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不区分大小写。(注意:0x中的0是数字0,而不是字母O) 以下是一些用法示例: int a = 0x100F; int b = 0x70 + a; 至此,我们学完了所有进制:10进制,8进制,16进制数的表达方式。最后一点很重要,C/C++中,10进制数有正负之分,比如12表示正12,而-12表示负12,;但8进制和16进制只能用达无符号的正整数,如果你在代码中里:-078,或者写:-0xF2,C,C++并不把它当成一个负数。 6.2.7 十六进制数在转义符中的使用 转义符也可以接一个16进制数来表示一个字符。如在6.2.4小节中说的 '?' 字符,可以有以下表达方式: '?' //直接输入字符 '\77' //用八进制,此时可以省略开头的0 '\0x3F' //用十六进制 同样,这一小节只用于了解。除了空字符用八进制数 '\0' 表示以外,我们很少用后两种方法表示一个字符。 6.3 十进制数转换到二、八、十六进制数 6.3.1 10进制数转换为2进制数 给你一个十进制,比如:6,如果将它转换成二进制数呢? 10进制数转换成二进制数,这是一个连续除2的过程: 把要转换的数,除以2,得到商和余数, 将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。 听起来有些糊涂?我们结合例子来说明。比如要转换6为二进制数。 “把要转换的数,除以2,得到商和余数”。 那么: 要转换的数是6, 6 ÷ 2,得到商是3,余数是0。 (不要告诉我你不会计算6÷3!) “将商继续除以2,直到商为0……” 现在商是3,还不是0,所以继续除以2。 那就: 3 ÷ 2, 得到商是1,余数是1。 “将商继续除以2,直到商为0……” 现在商是1,还不是0,所以继续除以2。 那就: 1 ÷ 2, 得到商是0,余数是1 (拿笔纸算一下,1÷2是不是商0余1!) “将商继续除以2,直到商为0……最后将所有余数倒序排列” 好极!现在商已经是0。 我们三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110了! 6转换成二进制,结果是110。 把上面的一段改成用表格来表示,则为: 被除数 计算过程 商 余数 6 6/2 3 0 3 3/2 1 1 1 1/2 0 1 (在计算机中,÷用 / 来表示) 如果是在考试时,我们要画这样表还是有点费时间,所更常见的换算过程是使用下图的连除: (图:1) 请大家对照图,表,及文字说明,并且自已拿笔计算一遍如何将6转换为二进制数。 说了半天,我们的转换结果对吗?二进制数110是6吗?你已经学会如何将二进制数转换成10进制数了,所以请现在就计算一下110换成10进制是否就是6。 6.3.2 10进制数转换为8、16进制数 非常开心,10进制数转换成8进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成8。 来看一个例子,如何将十进制数120转换成八进制数。 用表格表示: 被除数 计算过程 商 余数 120 120/8 15 0 15 15/8 1 7 1 1/8 0 1 120转换为8进制,结果为:170。 非常非常开心,10进制数转换成16进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成16。 同样是120,转换成16进制则为: 被除数 计算过程 商 余数 120 120/16 7 8 7 7/16 0 7 120转换为16进制,结果为:78。 请拿笔纸,采用(图:1)的形式,演算上面两个表的过程。 6.4 二、十六进制数互相转换 二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。 我们也一样,只要学完这一小节,就能做到。 首先我们来看一个二进制数:1111,它是多少呢? 你可能还要这样计算:1 * 2^0 + 1 * 2^1 + 1 * 2^2 + 1 * 2^3 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。 然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。即,最高位的权值为23 = 8,然后依次是 22 = 4,21=2, 20 = 1。 记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。 下面列出四位二进制数 xxxx 所有可能的值(中间略过部分) 仅4位的2进制数 快速计算方法 十进制值 十六进值 1111 = 8 + 4 + 2 + 1 = 15 F 1110 = 8 + 4 + 2 + 0 = 14 E 1101 = 8 + 4 + 0 + 1 = 13 D 1100 = 8 + 4 + 0 + 0 = 12 C 1011 = 8 + 4 + 0 + 1 = 11 B 1010 = 8 + 0 + 2 + 0 = 10 A 1001 = 8 + 0 + 0 + 1 = 10 9 .... 0001 = 0 + 0 + 0 + 1 = 1 1 0000 = 0 + 0 + 0 + 0 = 0 0 二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。 如(上行为二制数,下面为对应的十六进制): 1111 1101 , 1010 0101 , 1001 1011 F D , A 5 , 9 B 反过来,当我们看到 FD时,如何迅速将它转换为二进制数呢? 先转换F: 看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?应该是8 + 4 + 2 + 1,所以四位全为1 :1111。 接着转换 D: 看到D,知道它是13,13如何用8421凑呢?应该是:8 + 2 + 1,即:1011。 所以,FD转换为二进制数,为: 1111 1011 由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。 比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数: 被除数 计算过程 商 余数 1234 1234/16 77 2 77 77/16 4 13 (D) 4 4/16 0 4 结果16进制为: 0x4D2 然后我们可直接写出0x4D2的二进制形式: 0100 1011 0010。 其中对映关系为: 0100 -- 4 1011 -- D 0010 -- 2 同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。 下面举例一个int类型的二进制数: 01101101 11100101 10101111 00011011 我们按四位一组转换为16进制: 6D E5 AF 1B 6.5 原码、反码、补码 结束了各种进制的转换,我们来谈谈另一个话题:原码、反码、补码。 我们已经知道计算机中,所有数据最终都是使用二进制数表达。 我们也已经学会如何将一个10进制数如何转换为二进制数。 不过,我们仍然没有学习一个负数如何用二进制表达。 比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 00000101 5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。 现在想知道,-5在计算机中如何表示? 在计算机中,负数以其正值的补码形式表达。 什么叫补码呢?这得从原码,反码说起。 原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。 比如00000000 00000000 00000000 00000101 是 5的 原码。 反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。 取反操作指:原为1,得0;原为0,得1。(1变0; 0变1) 比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。 称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。 反码是相互的,所以也可称: 11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。 补码:反码加1称为补码。 也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。 比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。 那么,补码为: 11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011 所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。 再举一例,我们来看整数-1在计算机中如何表示。 假设这也是一个int类型,那么: 1、先取1的原码:00000000 00000000 00000000 00000001 2、得反码: 11111111 11111111 11111111 11111110 3、得补码: 11111111 11111111 11111111 11111111 可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF。 一切都是纸上说的……说-1在计算机里表达为0xFFFFFF,我能不能亲眼看一看呢?当然可以。利用C++ Builder的调试功能,我们可以看到每个变量的16进制值。