C语言基础一之预备知识(计算机结构组成、计算机系统组成、进制、原码反码补码)

一. 计算机介绍

1.计算机结构组成

C语言基础一之预备知识(计算机结构组成、计算机系统组成、进制、原码反码补码)_第1张图片
冯·诺依曼体系结构冯·诺依曼理论的要点是:数字计算机的数制采用二进制;计算机应该按照程序顺序执行。
根据冯·诺依曼体系结构构成的计算机,必须具有如下功能:把需要的程序和数据送至计算机中。必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作。能够按照要求将处理结果输出给用户。
将指令和数据同时存放在存储器中,是冯·诺依曼计算机方案的特点之一 计算机由控制器、运算器、存储器、输入设备、输出设备五部分组成 冯·诺依曼提出的计算机体系结构,奠定了现代计算机的结构理念。

2.计算机系统组成

C语言基础一之预备知识(计算机结构组成、计算机系统组成、进制、原码反码补码)_第2张图片

3.程序和指令

指令是对计算机进行程序控制的最小单位。
所有的指令的集合称为计算机的指令系统
程序是伪完成一项特定任务而用某种语言编写的一组指令序列。

二.进制

进制就是进位制。比如我们平时使用的是十进制,逢十进一,9+2=11=9+1+1;我们生活中时间计算小时使用的二十四进制,二十四进一,二十四小时过了,就加一天。

1.二进制

计算机底层使用的就是二进制。二进制数据是用0和1两个数码来表示的数。它的基数是2,进位规则是“逢二进一”,借位规则是“借一当二”。
数据在计算中主要是以补码的形式存储的。
C语言基础一之预备知识(计算机结构组成、计算机系统组成、进制、原码反码补码)_第3张图片

十进制整数转化二进制的方法:除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。
C语言基础一之预备知识(计算机结构组成、计算机系统组成、进制、原码反码补码)_第4张图片
十进制小数转换成二进制:小数部分和2相乘,取整数,不足1取0,每次相乘都是小数部分,顺序看取整后的数就是转化后的结果。
C语言基础一之预备知识(计算机结构组成、计算机系统组成、进制、原码反码补码)_第5张图片
注意:乘的时候只乘小数部分;0.432只有3位,故只需3位;0.432的二进制为:0.011。

2.八进制

八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。一些编程语言中常常以数字0开始表明该数字是八进制。

八进制二进制相互转换
八进制一位对应二进制三位
C语言基础一之预备知识(计算机结构组成、计算机系统组成、进制、原码反码补码)_第6张图片

十进制转换八进制的方法:
用十进制数除以8,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。
C语言基础一之预备知识(计算机结构组成、计算机系统组成、进制、原码反码补码)_第7张图片

3.十六进制

十六进制(英文名称:Hexadecimal),同我们日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9,A-F对应10-15。

十六进制一位对应二进制四位
C语言基础一之预备知识(计算机结构组成、计算机系统组成、进制、原码反码补码)_第8张图片

十进制转换十六进制的方法:
用十进制数除以16,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。
C语言基础一之预备知识(计算机结构组成、计算机系统组成、进制、原码反码补码)_第9张图片

4.C语言表示相应进制数

十进制         以正常数字1-9开头,如123
八进制         以数字0开头,如0123
十六进制       以0x开头,如0x123
二进制         C语言不能直接书写二进制数

案例:
#include
int main ()
{
        int a = 123;            //十进制方式赋值
        int b = 0123;         //八进制方式赋值, 以数字0开头
        int c = 0xABC;      //十六进制方式赋值
        //如果在printf中输出一个十进制数那么用%d,八进制用%o,十六进制是%x
        printf ( "十进制:%d\n" , a );
        printf ( "八进制:%o\n" , b );       //%o,为字母o,不是数字
        printf ( "十六进制:%x\n" , c );
        return 0;
}



三.计算机内存数值存储方式(原码、反码、补码)

整数的原码、反码、补码都一样。

1.原码

最高位为符号位,0代表正,为1代表负,数值部分就是数值本身绝对值的二进制数。
案例:
十进制数          原码
 +15            0000 1111
 -15            1000 1111
 + 0            0000 0000
 - 0            1000 0000 

2.反码(通常作为 求补码 中间过渡

对于负数,符号位不变,其余位取反。

3.补码:在计算机系统中,数值一律使用补码存储。

对于负数,其补码为它的反码 +1

补码求原码:补码符号位不动,其他为求反,最后整个数+1,得到原码。
案例:
十进制数          原码
 +15            0000 1111(正数原码、反码、补码一样)
 -15            1000 1111
 + 0            0000 0000
 - 0            1000 0000 

4.补码的意义

(1) 补码统一了零的编码
案例:用8位二进制数分别表示+0 和 -0
用原码:
+ 0            0000 0000
- 0            1000 0000 
用反码:
+ 0            0000 0000
- 0            1111 1111
用补码:
+ 0            0000 0000
- 0           10000 0000 (1进位丢失)
所以,补码统一了零的编码。

(2) 两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃
案例:计算9-6
原码计算:
C语言基础一之预备知识(计算机结构组成、计算机系统组成、进制、原码反码补码)_第10张图片
补码计算:
C语言基础一之预备知识(计算机结构组成、计算机系统组成、进制、原码反码补码)_第11张图片

(3)在计算机系统中,数值一律用补码来存储,主要原因是:
统一了零的编码
  • 将符号位和其它位统一处理
  • 将减法运算转变为加法运算
  • 两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃

你可能感兴趣的:(C语言,C语言,计算机体系结构,计算机系统组成,进制,原码反码补码)