计算机底层编译原理 二进制

import java.io.IOException;

public class Demo07 {

    public static void main(String[] args)
        throws IOException{
        //int c = ‘中‘;
        int c = 0x4e2d;
        System.out.println(c);
        System.out.println(Integer.toBinaryString(c));
        int m = 0x3f;
        //将c的最后6位截取下来为k
        int k = c&m;
        System.out.println(Integer.toBinaryString(k));
        //将字符c的编为UTF-8,得到最后一个字节b3
        int b3 = c&0x3f|0x80;
        System.out.println(Integer.toBinaryString(b3));
        //编码b2
        int b2 = (c>>>6)&0x3f|0x80;
        System.out.println(Integer.toBinaryString(b2));
        //编码b1
        int b1 = (c>>>12)|0xe0;
        //验证:
        byte[] bytes = {(byte)b1,(byte)b2,(byte)b3};
        String str = new String(bytes, "UTF-8");
        System.out.println(str);//中
        char cc = decodeUtf8(bytes);
        System.out.println(cc);
    }

    public static char decodeUtf8(byte[] bytes){
        int b1 = bytes[0];
        int b2 = bytes[1];
        int b3 = bytes[2];
        System.out.println(Integer.toBinaryString(b1));
        //b1 = 11111111 11111111 11111111 11100010
        //b2 = 11111111 11111111 11111111 10111000
        //b3 = 11111111 11111111 11111111 10101101

// (b1&0xf)<<12 00000000 00000000 00100000 00000000
// (b2&0x3f)<<6 00000000 00000000 00001110 00000000
// (b3&0x3f)    00000000 00000000 00000000 00101101

        // ch=  00000000 00000000 00101110 00101101

        int ch = ((b1&0xf)<<12)|((b2&0x3f)<<6)|(b3&0x3f);
        return (char)ch;
    }

    public static byte[] utf8(char ch){
        int b1 = (ch>>>12)|0xe0;
        int b2 = (ch>>>6) & 0x3f | 0x80;
        int b3 = ch & 0x3f | 0x80;
        return new byte[]{(byte)b1,(byte)b2,(byte)b3};
    }
}
时间: 2024-11-03 21:10:08

计算机底层编译原理 二进制的相关文章

计算机底层原理杂谈(白话文)

简单说一下写这篇文章的缘由.首先这个不是教学类型的,是我Java实在学不下去了,因为好多计算机底层原理都不是很清楚,每次学新东西都由于想不明白底层原理困惑,所以下决心停止学习Java的新东西,开始搞明白底层.一开始搞的所谓的底层是“Java虚拟机”,然后又C语言汇编语言什么的,其实是想图快,尽快接近现在做的事情.后来发现不行,这事快不了,所以干脆就从物理层面用导线灯泡集成芯片开始动手做一个cpu开始吧.其实也没多久,大概三个多月吧,从我之前写的[从零开始自制cpu]系列的学习文章也可以看到开始时

关于计算机编译原理

从我个人理解,计算机编译原理,顾名思义,就是关于计算机编程翻译的相关原理,即对计算机编程的,更为深入.更为详细的去解读计算机语言.上网看了许多个人解读编译原理,发现最令我信服的,就是把编译原理类比成人体解剖:只有认真解剖.研究人体各部位,才能在手术中.医治中做到更好的处理.因此,唯有理解编译原理,才能更好地进行计算机的编程等一系列的操作. 博客上有人说到,学习编译原理能够更加容易理解算法之间的关系.能培育自己的观点.提高学习语言的效率.但在我个人看来,学好编译原理,能让我们有一个更强的临时变换的

编译原理123

1.编译原理就是什么? 个人理解,编译就是像翻译一样,将一种语言翻译成另一种语言,编译就是将高级语言或汇编语言翻译成电脑能识别的二进制机器语言,编译原理就是讲解这 个编译的过程.内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和目标代码生成. 编译原理是计算机专业设置的一门重要的专业课程.虽然只有少数人从事编译方面的工作,但是这门课在理论.技术.方法上都对学生提供了系统而有效的训练,有 利于提高软件人员的素质和能力. 2.学习编译原理有什么好处? 学习编译原

0909走进编译原理

1.编译原理学什么? 编译原理这一学科,主要学习的是编译器方面的原理与技术,我们能从中学会各种算法与代码的原理,明白计算机是如何“听懂人话”,我们的代码是如何经过编译器转换成机器语言,这样不仅能实现自己去编写简单的小编译器,也能通过此学科去接触已有各编译器的思想,认识到编程方面更多要注意的问题以及解决的方向,站在本质的角度看代码,从而更能成就计算机专业人员的计算机逻辑思维. 2.为什么要学编译原理? 说到编译原理,人们喜欢把这门学科比作人体解剖和造轮子,是计算机中和代码作斗争的一门学科.据本人理

编译原理初感悟

1.编译原理就是什么? 个人理解,编译就是像翻译一样,将一种语言翻译成另一种语言,编译就是将高级语言或汇编语言翻译成电脑能识别的二进制机器语言,编译原理就是讲解这个编译的过程.内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和目标代码生成. 编译原理是计算机专业设置的一门重要的专业课程.虽然只有少数人从事编译方面的工作,但是这门课在理论.技术.方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力. 2.学习编译原理有什么好处? 学习编译原理可

Question20180104 对比编译器、解释器与Javac编译原理

编译器与Javac编译原理 在前文我们知道了Java是一种编译语言和解释语言,它的源代码经过编译器Javac编译为能够被JVM识别的二进制语言,然后JVM将其解释为能够被平台识别的机器语言.那么什么是编译器呢?编译器的作用是什么呢?Javac又是如何进行工作的?下面我们一一来认识了解. 1 编译器(Compiler ) 简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序.一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (

Knowledge Point 20180303 对比编译器、解释器与Javac编译原理

编译器与Javac编译原理 在前文我们知道了Java是一种编译语言和解释语言,它的源代码经过编译器Javac编译为能够被JVM识别的二进制语言,然后JVM将其解释为能够被平台识别的机器语言.那么什么是编译器呢?编译器的作用是什么呢?Javac又是如何进行工作的?下面我们一一来认识了解. 1 编译器(Compiler ) 简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序.一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (

大前端开发者需要了解的基础编译原理和语言知识

转自:https://yq.aliyun.com/articles/180879 在我刚刚进入大学,从零开始学习 C 语言的时候,我就不断的从学长的口中听到一个又一个语言,比如 C++.Java.Python.JavaScript 这些大众的,也有 Lisp.Perl.Ruby 这些相对小众的.一般来说,当程序员讨论一门语言的时候,默认的上下文经常是:“用 xxx 语言来完成 xxx 任务”.所以一直困扰着的我的一个问题就是,为什么完成某个任务,一定要选择特定的语言,比如安卓开发是 Java,前

编译原理简单介绍

编译原理学习导论 大学课程为什么要开设编译原理呢?这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,可是编译原理却一直作为大学本科的必修课程,同时也成为了研究生入学考试的必考内容.编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂,其解决算法也相对复杂.我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专注解决一种的算法了.在20世纪50年代,编译器的编写一直被认为是十分困难的事情,第