精华内容
下载资源
问答
  • 这本书《编码:隐匿在计算机软硬件背后的语言》的是计算机工作原理,但是很通俗易懂,很适合刚入门的,没有基础的人读。适合阅读人群:前端工程师、后端工程师、测试工程师。
  • 1. 介绍TCP/IP协议 TCP/IP不是一个协议,而是一个协议族的统称。...其实TCP/IP的工作原理通俗一点就是,一个主机的数据要经过哪些过程才能发送到对方的主机上。   TCP/IP分层的好处是把各个相对独立...

    1. 介绍TCP/IP协议

    TCP/IP不是一个协议,而是一个协议族的统称。里面包括IP协议、IMCP协议、TCP协议..传统上来说 TCP/IP 被认为是一个四层协议

     

    平常我们大部分时间都工作在应用层,下层的事情不用我们操心;其实TCP/IP的工作原理,通俗一点讲就是,一个主机的数据要经过哪些过程才能发送到对方的主机上

     

     

      TCP/IP分层的好处是把各个相对独立的功能解耦,层与层之间通过规定好的接口来通信。如果以后需要修改或者重写某一个层的实现,只要接口保持不变也不会影响到其他层的功能。接下来,我们将会介绍各个层的主要作用。

    1. 应用层
      应用层一般是我们编写的应用程序,其决定了向用户提供的应用服务。应用层可以通过系统调用与传输层进行通信。
      处于应用层的协议非常多,比如:FTP(File Transfer Protocol,文件传输协议)、DNS(Domain Name System,域名系统)和我们本章讨论的HTTP(HyperText Transfer Protocol,超文本传输协议)等。
    2. 传输层
      传输层通过系统调用向应用层提供处于网络连接中的两台计算机之间的数据传输功能。
      在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和UDP(User Data Protocol,用户数据报协议)。
    3. 网络层
      网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传输给对方。
    4. 链路层
      链路层用来处理连接网络的硬件部分,包括控制操作系统、硬件设备驱动、NIC(Network Interface Card,网络适配器)以及光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内。

    数据包封装

    上层协议数据是如何转变为下层协议数据的呢?这是通过封装(encapsulate)来实现的。应用程序数据在发送到物理网络之前,会沿着协议栈从上往下传递。每层协议都将在上层协议数据的基础上加上自己的头部信息(链路层还会加上尾部信息),以为实现该层功能提供必要的信息

     

     

    2. 介绍UDP和TCP协议的区别

      TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于广播和细节控制交给应用的通信传输。
    TCP:
    1、连接:数据传输可靠,传输之前需要连接
    2、大小:数据通过IO流的方式进行传输,可以传输无限大小的数据
    3、c/s:有服务端和客户端之分,也就是平时说的C/S(Client/Server)结构
    4、相比UPD传输速度
    UDP:
    1、连接:发送数据不需要创建连接,分为发送端和接收端
    2、大小:发送数据以包为单位进行发送,每个包的大小限制在64k
    3、传输速度块,可能会造成数据丢失
    4、相比TCP协议来说传输速度更快
    5、应用:直播,视频通话

    3. 介绍DNS域名解析过程

      客户端构造解析请求,并将解析请求发送到DNS服务器,DNS服务器查询该域名是否在该服务器所管辖的区域内,如果在则查询是否有该名称,存在该名称则从DNS数据库中取出相应的IP地址并返回给DNS可客户端,若不存在则将“名称不存在”信息返回给DNS客户端。如果不在该服务器的管辖范围内,则可用两种方法进行处理。
     1)递归:将解析请求转发给下一个DNS服务器进行递归查询并将结果返回给客户端
     2)迭代:产生包含下一个DNS服务器IP地址的响应并返回给DNS客户端

     

     

    4.介绍HTTP协议

      HTTP是超文本传输协议,是一种建立在TCP上的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。
    HTTP与TCP/IP、DNS的关系
    当客户端访问Web站点时,首先会通过DNS服务查询到域名的IP地址。然后浏览器生成HTTP请求,并通过TCP/IP协议发送给Web服务器。Web服务器接收到请求后会根据请求生成响应内容,并通过TCP/IP协议返回给客户端。
    流程图如下所示:

     



    作者:Apple_Boy
    链接:https://www.jianshu.com/p/acce938468c4
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • 计算机逻辑运算实现介绍

    千次阅读 2017-11-20 21:19:02
    通俗点来,三极管工作时,会根据B端所加电压的大小而决定由E流向C的电流是否接通。电压高则断路,电压低则接通。 也许你会奇怪,这种功能如何用来进行逻辑运算?别急,下面便是原理介绍。2.逻辑运算所谓逻辑运算...

    1.运算实现基础

    首先,我们需要了解的是计算机进行各种运算的物理基础,即它是通过什么元件及其组合来实现加法的。它就是三极管。
    这里写图片描述
    其中B是基极,E是发射极,C是集电极。通俗点来讲,三极管工作时,会根据B端所加电压的大小而决定由E流向C的电流是否接通。电压高则断路,电压低则接通。
    也许你会奇怪,这种功能如何用来进行逻辑运算?别急,下面便是原理介绍。

    2.逻辑运算

    所谓逻辑运算,就是我们经常说的“”,“”,“”三种逻辑关系。而这三种关系运用三极管是很容易做到的。
    如果把B端所加电压高低C,E端是否接通用“1”和“0”(后面我会直接使用这种方式说明)代表的话,那当B端为1或0,C,E端相应的便是0或1.这就做到了“非”的运算了。
    至于“与”和“或”,可以参照电路中的·串联与并联。将两个三极管串联起来构成“与”。
    这里写图片描述
    类似地,两个三极管并联构成“或”。
    但有一点需要注意,相信以上方法略加思考便会发现问题——反了。
    正常来说,对于一次“与”运算,应该会出现以下情况:
    这里写图片描述(其中A,B是输入端,F是输出端)
    而只要验证一下便会发现仅用两个三极管会造成结果相反,相当于一次“与非”运算,要解决这个问题只要再加一个三极管把结果再反一次就可以了。“或”同样如此。也就是说,要实现”非“,需要一个三极管,“与”“或”各需要三个。

    展开全文
  • 1、为什么要学习使用多线程? 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担。...通俗,当有工作来,就会向线程池拿一个线程...

    1、为什么要学习使用多线程?

    多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担。

    线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory。即便没有这样的情况,大量的线程回收也会给GC带来很大的压力。

    为了避免重复的创建线程,线程池的出现可以让线程进行复用。

    通俗点讲,当有工作来,就会向线程池拿一个线程,当工作完成后,并不是直接关闭线程,而是将这个线程归还给线程池供其他任务使用

    在开发过程中,合理地使用线程池能够带来3个好处。

    第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
    第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
    第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,
    还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。但是,要做到合理利用
    线程池,必须对其实现原理了如指掌。

    2、线程池使用场景

    线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。

    如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜。),况且我们还不能控制线程池中线程的开始、挂起、和中止。

    3、ThreadPoolExecutor

    Executor框架的最顶层实现是ThreadPoolExecutor类,Executors工厂类中提供的newScheduledThreadPool、newFixedThreadPool、newCachedThreadPool方法其实也只是ThreadPoolExecutor的构造函数参数不同而已。通过传入不同的参数,就可以构造出适用于不同应用场景下的线程池,那么它的底层原理是怎样实现的呢?

    以newFixedThreadPool为例,查看源码,可以看到通过传入特定的参数,利用threadPoolExecutor就构造出了newFixedThreadPool线程池。

    那threadPoolExecutor的构造函数一共有哪些参数呢?

    corePoolSize: 核心池的大小。 当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中
    maximumPoolSize: 线程池最大线程数,它表示在线程池中最多能创建多少个线程;
    keepAliveTime: 表示线程没有任务执行时最多保持多久时间会终止。
    unit: 参数keepAliveTime的时间单位,有7种取值,在TimeUnit类中有7种静态属性。

    4、线程池四种创建方式

    Java通过Executors(jdk1.5并发包)提供四种线程池。

    4.1、newCachedThreadPool

    创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

    // 1.可缓存的线程池 重复利用
             ExecutorService newCachedThreadPool =
             Executors.newCachedThreadPool();
             for (int i = 0; i < 10; i++) {
                 int temp = i;
                 newCachedThreadPool.execute(new Runnable() {
                
                 @Override
                 public void run() {
                    System.out.println("threadName:" + Thread.currentThread().getName() +
                    ",i:" + temp);
                    }
                 });
             }

    4.2、newFixedThreadPool

    创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待(将任务交给线程池中的线程)。

    // 2.可固定长度线程池
            ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(3);
            for (int i = 0; i < 10; i++) {
                int temp = i;
                newFixedThreadPool.execute(new Runnable() {
    
                    @Override
                    public void run() {
                        System.out.println(Thread.currentThread().getName() + ",i:" + temp);
                    }
                });
            }

     线程池为无限大,当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。

    4.3、newScheduledThreadPool

    创建一个定长线程池,支持定时及周期性任务执行。

        //3. 可定时线程池。延迟三秒启动线程
            ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(3);
            for (int i = 0; i < 10; i++) {
                int temp = i;
        
                newScheduledThreadPool.schedule(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println(Thread.currentThread().getName() + ",i:" + temp);
                    }
                },3,TimeUnit.SECONDS);
            }

    scheduledThreadPool.scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("delay 1 seconds, and excute every 3 seconds"); } }, 1, 3, TimeUnit.SECONDS);
    //延迟一秒执行,之后每三秒执行一次
            scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
     
                @Override
                public void run() {
                    System.out.println("delay 1 seconds, and excute every 3 seconds");
                }
                
            }, 1, 3, TimeUnit.SECONDS);

    定长线程池的大小最好根据系统资源进行设置。如Runtime.getRuntime().availableProcessors()

     

    4.4、newSingleThreadExecutor

    创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

    //4.单线程
            ScheduledExecutorService newSingleThreadScheduledExecutor = Executors.newSingleThreadScheduledExecutor();
            for (int i = 0; i < 10; i++) {
                //java内部类访问局部变量时局部变量必须声明为final
                //java进行过优化,如果一个变量进行声明后未做修改,默认添加final
                int temp=i;
    
                newSingleThreadScheduledExecutor.execute(new Runnable(){
                
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(500);
                        } catch (Exception e) {
                            // TODO: handle exception
                        }
            
                       try {
                           int j =1/0;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                        System.out.println(Thread.currentThread().getName() + ",i:" + temp);
                            
                    }
                });;
            }
          //等待所有线程任务完成,退出线程池,不然程序会一直运行
          newSingleThreadScheduledExecutor.shutdown();

    5、线程池原理剖析

     

    1、如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(注意,执行这一步骤需要获取全局锁)。

    2、如果运行的线程等于或多于corePoolSize,则将任务加入BlockingQueue。

    3、如果无法将任务加入BlockingQueue(队列已满),则在非corePool中创建新的线程来处理任务(注意,执行这一步骤需要获取全局锁)。

    4、如果创建新线程将使当前运行的线程超出maximumPoolSize,任务将被拒绝,并调用RejectedExecutionHandler.rejectedExecution()方法。

    6、合理配置线程池

    要想合理的配置线程池,就必须首先分析任务特性,可以从以下几个角度来进行分析:

    任务的性质:CPU密集型任务,IO密集型任务和混合型任务。

    任务的优先级:高,中和低。

    任务的执行时间:长,中和短。

    任务的依赖性:是否依赖其他系统资源,如数据库连接。

    任务性质不同的任务可以用不同规模的线程池分开处理。

    CPU密集型时,任务可以少配置线程数,大概和机器的cpu核数相当,这样可以使得每个线程都在执行任务

    IO密集型时,大部分线程都阻塞,故需要多配置线程数,2*cpu核数

    混合型的任务,如果可以拆分,则将其拆分成一个CPU密集型任务和一个IO密集型任务,只要这两个任务执行的时间相差不是太大,那么分解后执行的吞吐率要高于串行执行的吞吐率,如果这两个任务执行时间相差太大,则没必要进行分解。我们可以通过Runtime.getRuntime().availableProcessors()方法获得当前设备的CPU个数。

    优先级不同的任务可以使用优先级队列PriorityBlockingQueue来处理。它可以让优先级高的任务先得到执行,需要注意的是如果一直有优先级高的任务提交到队列里,那么优先级低的任务可能永远不能执行。

    执行时间不同的任务可以交给不同规模的线程池来处理,或者也可以使用优先级队列,让执行时间短的任务先执行。

    依赖数据库连接池的任务,因为线程提交SQL后需要等待数据库返回结果,如果等待的时间越长CPU空闲时间就越长,那么线程数应该设置越大,这样才能更好的利用CPU。

    转载于:https://www.cnblogs.com/jsyllhb/p/10503693.html

    展开全文
  • 软件产品构成的主要部分 软件开发模型 严格地说软件工程是应用计算机科学数学及管理科学等原理开发软件的工程 通俗地说软件工程是实现一个大型程序的一套原则方法即按工程化的原则和方法组织软件开发工作 ...
  • 接着讲解了微型机和外设之间的各种数据传输方式,其中,着重分析了中断方式和DMA方式的工作原理和传输特点,并用较多篇幅讲述微型机的接口技术,逐一讲解了各关键接口部件以及多功能接口部件的原理和应用;...
  • 从就业与择业的角度来计算机相关专业的大学生从事oracle方面的技术是职业发展中的最佳选择。 其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的...
  • 00_预备知识

    2018-04-03 14:13:00
    ·了解计算机  通俗计算机是个“超级工具”,是个能执行命令... 采用该存储结构的工作原理:把计算过程描述为由许多条命令按一定顺序组成的程序,然后把程序和所需要的数据一起输入计算机存储器中保存起来...

    ·了解计算机

      通俗地讲,计算机是个“超级工具”,是个能执行命令的电子设备。几乎所有的计算机都遵循冯·诺伊曼的“存储--运行”结构,它将计算机主要分为以下5个部分:输入、输出、存储器、运算器和控制器。冯·诺伊曼体系结构如图1所示:

     

    1  计算机组成

      采用该存储结构的工作原理:把计算过程描述为由许多条命令按一定顺序组成的程序,然后把程序和所需要的数据一起输入计算机存储器中保存起来,工作时控制器执行程序,控制计算机自动连续进行运算。

    ·了解相关的硬件和软件知识

      我们知道计算机主要是由硬件软件组成。

      其中,计算机的硬件主要有中央处理器(CPU, Central Processing Unit)、内存(或称主存、随机存储器、RAM――Random Access Memory)、输入/输出设备Input/Output Devices)和外部存储设备Secondary Storage,多数为具备海量存储能力的硬盘)

      CPU:计算机系统中的“大脑”。它从内存中取指令并执行它们。其基本工作过程是提取指令、译码分析、执行指令。其内部有若干寄存器,其中一类是通用寄存器,用来存放关键变量和中间结果;另外一类是专用寄存器,如程序计数器(PC),子程序返回(LR),堆栈指针寄存器(SP),程序状态寄存器(PSR)。PC保存下一条要执行的指令的地址;LR保存现场地址;SP保存内存栈当前帧面的首地址,栈中保存函数调用时的数据信息;PSR保存当前处理器的执行状态。

      存储器:内存和外存,内存容量一般是1G~8G,外存主要是指硬盘,其容量现在基本上已经是以TB为单位了。CPU不能直接存储磁盘上的信息,所以必须先将保存在磁盘上的数据和代码加载到内存之后才能被CPU访问。

            软件主要分为系统软件应用软件

            系统软件是用来控制计算机,管理计算机上的资源,使计算机的硬件有效起作用的。在系统启动时装载入内存的程序集合称为操作系统,没有操作系统的计算机什么也干不了,操作系统除了进行内存管理、文件管理和输入输出管理外,一般都提供了很多系统级的服务供用户调用。但不要认为操作系统程序是多么的高深莫测,从本质上所,它也是用程序设计语言写出来的。只要你掌握了程序设计的原理和硬件系统的相关知识,你甚至可以写出自己的操作系统。除了操作系统外,设备驱动程序和其他一些管理工具也可以归入系统软件的范畴。常见的操作系统:DOSWINDOWSUNIXLINUX

      应用软件Application,尽管系统软件虽然能有效处理计算机的内部功能,协助计算机使用外围设备,但却没有把计算机转化成可以写报告,练打字,看电影等多用途的机器,想要实现这些功能,需要安装应用软件。应用软件程序面向特定的应用,如WORD用来处理文字,EXCEL用来记录数据,还有供娱乐的游戏程序等等

    ·语言简介

    语言在人类的交流中的作用无可取代,要想交流通畅,有共同的语言是首要条件,打个比方,一个中国人想和一个英国人聊天,光靠比划手势是不行的,有两条路可以选,要么学习英语,要么找一个翻译。计算机程序设计同样如此,计算机是无生命无知觉的机器,不懂人类的语言,不管是汉语还是英语,计算机都不会接受,人类要想和其交流,让计算机完成特定的任务,必须解决“语言”的问题。同样,人类和计算机交流同样有两条路:要么学习机器语言,要么找一个“翻译”。

    语言发展:机器语言->汇编语言->高级语言(又分为:面向过程、面向对象)如图2

     

    2  语言的发展

      机器语言:计算机是一种电子设备,计算机处理的是数字信号。数字信号采用01记录信息,那么计算机的语言,称为机器语言(Machine Language),自然也就是01序列。数字01称为二进制数据(Binary Digit),或者称为位(Bit),这种01的序列就称为二进制代码。

      汇编语言Assembly Language):汇编的出现简化了程序员的工作,在汇编语言中,用便于记忆的方法定义程序指令。

      高级语言:既然机器语言和汇编语言都是计算机可以理解的语言,用其可以完全控制计算机的行为,那么为什么人们还要创造并使用高级程序设计语言呢?因为机器语言和汇编语言都是低级语言,是面向机器的,与具体的计算机相关。学习起来困难,编程效率也低,可读性、可维护性也差。

      还是举个例子,一个说普通话的北京人想要去欧洲旅行,可是他不懂任何一门欧洲语言;恰好,一个说粤语的广东人也去欧洲旅行,而且,他懂得德语、英语、法语、西班牙语等所有欧洲语言,他们结伴同行。北京人想要同欧洲人交流,有两种方式:一是学习各种欧洲语言,然后同各个国家的人直接交流;二是让广东人当翻译,将自己的意思讲给欧洲人听,并将欧洲人的回答反馈给自己。如果您是那个北京人,您选择哪种方式?我想答案是确定的,肯定要请广东人当翻译。虽然普通话和粤语也有一定的差异,但是比起同欧洲语言的差异来,这种差异小了很多。况且,如果直接同欧洲人交流,需要学习多少门语言?

      高级语言和计算机的关系,与北京人的语言和欧洲人的关系相似。高级语言编写的程序借助于编译器就可以在特定的机器上运行,不同的欧洲人相当于不同的计算机,广东人相当于编译器,普通话相当于计算机高级语言。

    ·程序的概念

      计算机程序规定了计算机要执行哪些动作及这些动作应当按什么顺序来执行,如同菜谱规定了厨师做菜的材料和步骤。

      著名的计算机科学家Nikiklaus Wirth提出了一个公式:

      程序 = 数据结构 + 算法。

      数据结构:即数据的存储形式,程序用到的信息。

      算法:操作步骤,对操作的描述,程序用什么方法解决问题。

    ·编译原理

    编译原理如图3

     

    3  编译原理

    ·程序执行流程

    程序执行流程如图4

    4  程序执行流程

    ·原码、反码、补码

    ·原码:将最高位作为符号位(0代表正,1代表负),其余各位代表数值本身的绝对值(以二进制表示)

    为了简单起见,我们用1个字节来表示一个整数。实例如下:

    +7的原码为:00000111

    -7的原码为: 10000111

    ·反码:一个数如果为正,则它的反码与原码相同;一个数如果为负,则符号位为1,其余各位是对原码取反。

    为了简单起见,我们用1个字节来表示一个整数。实例如下:

    +7的反码为:00000111

    -7的反码为: 11111000

    ·补码:一个数如果为正,则它的原码、反码、补码相同;一个数如果为负,则符号位为1(保持不变),其余各位是对原码取反,然后整个数加1。另外,在计算机中,如果我们用1个字节表示一个数,一个字节有8位,超过8位进的1会被丢弃。如下:

    1 00000000    进位1被丢弃。    

    为了简单起见,我们用1个字节来表示一个整数。

    +7的补码为:00000111

    -7的补码为: 11111001

    计算机中数的存储是以补码的形式存储的。最高位是符号位,0表示整数,1表示负数。

    正数的原码、补码、反码都相同 

      Eg: short a = 1; 则原码、补码、反码都是00000000 00000001

    负数的补码是将原码符号位不变,其余按位取反后加1.  

      Eg: short b = -2; 则原码:10000000 00000010 补码为11111111 11111110

    二进制的负数转换为十进制表示需要通过补码转换的:

    1)比如:short a=1;

    二进制表示为00000000 00000001

    2short b=~a;

    即则b为对a的每位取反,结果b = 11111111 11111110; 16进制表示为0xFFFE

    如果转换为十进制,则要转换为补码(补码的原则是原码的符号位不变,其余位数取反,然后将结果加1):

    10000000 00000001+1=10000000 00000010

    显示出来就是-2

    (一个数按位取反之后的数为它的相反数-1)

    那么为什么需要补码呢?

    这是因为计算机没有减法运算,减法运算都是通过补码实现的,举例如下:

    假设两个short类型的数据,如何实现2 - 1 运算呢?

    实际上计算机是用2(-1的补码)来完成的

    2的表示是 00000000 00000010

    -1的原码是10000000 00000001

    -1的补码是11111111 11111111

    2-1=2+(-1的补码)

    2              00000000 00000010

    -1的补码       11111111 11111111

    计算结果:     00000000 00000001

    (运算规则:0+0=0  1+0=1  0+1=1  1+1=10

    那么如果计算结果出现负数怎么办呢?

    1-2=1+(-2的补码)

    1                  00000000 00000001

    -2的补码(符号位不变,原码取反+1)        11111111 11111110

    计算结果:                              11111111 11111111

    用十进制表示,则要转换为补码显示出来,则为10000000 00000001  -1

    转载于:https://www.cnblogs.com/springl/p/8708090.html

    展开全文
  • 跟我从零学Java

    2015-08-12 16:25:17
    ·了解计算机 通俗计算机是个“超级工具”,是个能执行命令的电子... 采用该存储结构的工作原理:把计算过程描述为由许多条命令按一定顺序组成的程序,然后把程序和所需要的数据一起输入计算机存储器中保存起
  • 通俗,智能合约是一种在满足特定条件时,自动执行的一种计算机程序。 二、 智能合约的工作原理是什么? 简单来说,智能合约的工作原理包括以下3个环节: 构建 → 存储 → 执行(1、2为构建;3为存储;4为...

空空如也

空空如也

1 2 3 4 5
收藏数 83
精华内容 33
关键字:

通俗讲计算机工作原理