符号计算

Java 位运算超全面总结

大憨熊 提交于 2019-11-30 03:17:17
1.原码、反码、补码 关于原码、反码、补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动简洁的解释: 对原码、反码、补码最通俗易懂,生动简洁的解释 ,墙裂建议大家先看完这篇科普文章。在继续讨论之前你要先明白一点: 整数在计算机内部都是以补码形式存储的 。 2.Java 位运算概览 OK 都看到这儿了那我就假定你已经掌握了原码、反码、补码相关知识(虽然上面那段几乎啥也没讲,纯凑字数) 不废话了。 首先,在程序中,位运算符的优先级很低!且位运算是只针对整型(是的这里指所有整型)数据的,无论正负,先搞清楚这两点,我们继续说。 Java 中的位运算共有 与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)、无符号右移(>>>) 这7种,概览见下表: 符号 含义 详解 & 位与 两个比特位都为 1 时,结果才为 1,否则为 0 (位与操作满足交换律和结合律,甚至分配律) | 位或 两个比特位都为 0 时,结果才为 0,否则为 1 (位或操作满足交换律和结合律,甚至分配律) ~ 位非 即按位取反,1 变 0,0 变 1 ^ 异或 两个比特位相同时(都为 0 或都为 1)为 0,相异为 1(异或操作满足交换律和结合律,甚至分配律。任何整数和自己异或的结果为 0

MYSQL中数据类型介绍

房东的猫 提交于 2019-11-30 02:57:37
一、MySQL的数据类型 主要包括以下五大类: 整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT 浮点数类型:FLOAT、DOUBLE、DECIMAL 字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB 日期类型:Date、DateTime、TimeStamp、Time、Year 其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等 1、整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3个字节 范围(-8388608~8388607) int(m) 4个字节 范围(-2147483648~2147483647) bigint(m) 8个字节 范围(+-9.22*10的18次方) 取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为

CPU如何区分溢出和自然进位?

喜你入骨 提交于 2019-11-30 02:21:17
CPU如何区分溢出和自然进位? 之前学习补码的时候倒是学会了基本概念,但是最近又接触时发现还有不清楚的地方,所以又研究了下 今天的核心问题的“ CPU是如何区分高位自然舍弃和溢出的? ” 先给出结论: 如果运算中,数值位最高位(也就是有符号数的正数第二位)和符号位(也就是正数第一位)同时进位,则是自然舍弃。两者间如果只有一个进位,则是溢出。 下面来讲解一下。运算的所有情况可以划分为四种: 符号位进位,数值最高位不进位 符号位不进位,数值最高位进位 符号位和数值最高位都进位 符号位和数值最高位都不进位 对于第四种情况,就没什么好说了,都不进位的话根本涉及不到区分的问题。 对于第一种和第二种情况都好理解:对于第一种情况,既然数值最高位没有进,那么符号位的进位就一定是完全由符号位导致的,也就是说符号位一定是两个1,那么这样进位的结果就是符号位为0——两个负数加法运算结果为正数,当然是溢出了。第二种也是同理,数值最高位进位了而符号位没有进,只能说明原来符号位是两个0,那么就是两个正数相加结果为负数,溢出无疑了。 比较复杂一点的是情况3,它又可以细分为: 两个数符号位都是1 一个数符号位为1,另一个是0 要讲清楚这里的内容,我们要了解一下究竟什么是溢出?我们以4位二进制数为例,它的表示范围是[-8,7]。注意,溢出是结果错误,但不是二进制加法本身有错误,我们所说的溢出

《构建之法》——第二次作业

岁酱吖の 提交于 2019-11-30 01:48:24
GIT地址 git地址 GIT用户名 Luo-Star 学号后五位 62309 博客地址 个人博客首页 作业链接 作业链接 一、 配置环境  关于环境配置,我之前是配置过vs2017,但是当时我装的时候没有装c#的组件,所以需要重新进行安装。但是在重新进行安装的问题是,Visual Studio Installer下载安装的速度确实太慢了,所以我换了一种方式,我是下载的离线版本的VS2015(带有c++模块的)     上图是正在安装的图片,因为是离线版本,所有的组件已经下载完整了的,就只用执行安装就好了,还是非常快的    这个是一个基础环境的配置,Development Settings 选择General 就行不用选择 C# ,我们可以进去之后建立C#的项目,主题的话,我个人比较喜欢深色,选择了Dark。    到这里的话,基本上就完成了软件的安装了,c++的环境软件安装包自动的配置好了。 二、 代码设计的思路  自动生成小学四则运算题目与解决题目  首先要解决的问题是随机产生四则运算符号符号和随机产生数的问题,符号有+,-,*,/ 四种,随机数是在0-100中随机产生,那么就需要用到随机函数了    上图是我定义的Symbol类中的一个随机产生符号的方法,定义一个字符数组,数组中存储了四种运算符号,通过产生随机数当做数组下标来随机产生符号,并将产生的符号转换成字符串返回

源码、反码和补码

痴心易碎 提交于 2019-11-29 22:27:21
一、机器数和真值 要想学习原码, 反码和补码,首先需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。 那么,这里的 00000011 和 10000011 就是机器数。 2、真值 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。 例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。 所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。 例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 二、源码、反码和补码 1、源码 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: [+1] 原 = 0000 0001 [-1] 原 = 1000 0001 第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是: [1111 1111 , 0111 1111] 即:[-127 , 127]

CSAPP DataLab

限于喜欢 提交于 2019-11-29 22:14:40
断断续续做了两天可算做的差不多,, 注意不同版本的题目可能会有所不同,搜了很多他们的题目和现在官网给的实验题都不一样,自己独立思考完整做一遍顺便记录一下。 PS:刚开始这些难度为1的题有的说实话我都做了挺久的,不过到后面虽然难度上升了,但是确越做越有感觉了,另外完整做一遍感觉很有意思,这些题总体感觉就是让你自己把那些运算符< ,> ? 什么的自己使用位级运算手动实现一遍,知道底层是怎样运作的。 一, bitXor: /* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) = 1 * Legal ops: ~ & * Max ops: 14 * Rating: 1 */ int bitXor(int x, int y) { return 2; } View Code 题目如图, 题目解释:使用~ & 完成 ^ 位运算,虽然难度很低,但是我也推导了半天,, 思路:异或可以理解为取出a,b之中不相同的位,& 就是取出为都为1的位,那么我们可以先取出同为1的,然后取反,就得到了同为0或者不相同的位,即 ~(a&b) ,接着,我们取出同为0的,取反,得到同为1或者不相同的位,即~(~a&~b), 接着,再取这两个的交集,就是我们所需要的不相同的位。即 int bitXor r(int x, int y) { return (~

Unicode与UTF-8、UTF-16、UTF-32

假装没事ソ 提交于 2019-11-29 21:51:30
Unicode Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了 统一 并且 唯一 的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 起源: 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早出现的ASCII码表就是一种用来表示大小写英文字母、数字和一些符号的统一编码表。 但是,如果要表示中文、日语、韩语等,显然一个字节是不够的,至少需要 两个字节 ,而且还不能和ASCII编码冲突,所以需要一个统一所有文字的编码,于是Unicode应运而生。 Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把 高字节全部填为0 就可以。在表示一个Unicode的字符时,通常会用" U+ "然后紧接着一组 十六进制的数字 来表示这一个字符。 作用: Unicode能够使计算机实现 跨语言 、 跨平台 的文本转换及处理。 方式: Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF。 UTF-8 、 UTF-16 、 UTF-32 都是将数字转换到程序数据的 编码方案 。 UTF-8 定义: UTF-8以字节为单位对Unicode进行编码。 从Unicode到UTF-8的 编码方式 如下:

二进制的原码,反码,补码简介

↘锁芯ラ 提交于 2019-11-29 19:28:53
二进制的原码,反码,补码简介 一,原码 1,正数的原码:将正数转换为二进制位就是这个正数的原码(高位为0,表示为正数,这个位置是符号位。) 例如:在计算机中,int 类型的十进制数10,的原码为: 0 0000000 00000000 00000000 00001010。 在计算机中,int 类型的十进制数8,的原码为: 0 0000000 00000000 00000000 00001000。 2,负数的原码:将负数的绝对值转换成二进制位然后在最高位前补1就是这个负数的原码。(这个位置是符号位。) 例如:在计算机中,int 类型的十进制数-10,的原码为: 1 0000000 00000000 00000000 00001010。 在计算机中,int 类型的十进制数-8,的原码为: 1 0000000 00000000 00000000 00001000。 二,反码 1,正数的反码:正数的反码就是原码。 例如:在计算机中,int 类型的十进制数10,的原码,和反码都为: 0 0000000 00000000 00000000 00001010。 在计算机中,int 类型的十进制数8,的原码,和反码都为: 0 0000000 00000000 00000000 00001000。 2,负数的反码:负数的反码等于原码除符号位以外所有的位取反(即,除符号位以外,原码为1

深入理解JVM,虚拟机类加载机制

天涯浪子 提交于 2019-11-29 19:15:02
类加载过程概览 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括以下7个阶段: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initialization) 使用(Using) 卸载(Unloading) 其中前五个阶段即为类加载的全过程。在后面会进行详细的介绍。而验证、准备、解析3个部分统称为连接(Linking)。这7个阶段的发生顺序如下图: 在上图中,加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始(开始而不是完成,这些阶段是互相交叉着进行的,在一个阶段执行过程中就会激活另一个阶段),而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java的运行时绑定(也称为动态绑定或晚期绑定)。 类初始化的时机 对于类加载过程的第一个阶段:加载,jvm规范中并没有进行强制约束其开始时机,可交由jvm的具体实现来自由把握。但是对于初始化阶段,jvm规范严格规定了有且只有下列5种情况必须对类进行“初始化”(很自然地,加载、验证、准备需要在此之前开始): 遇到 new 、 getstatic 、 putstatic 、 invokestatic 这四条字节码指令时,如果类没有进行过初始化,则必须先触发其初始化

#编译原理# 文法和内容(二)

偶尔善良 提交于 2019-11-29 17:35:18
文法和内容 编译原理笔记第二部分,内容参考:北航软院教师邵兵课堂课件及内容、张莉著《编译原理及编译程序构造》、国防工业出版社的《编译原理——学习指导与典型题解析》、 AlvinZH的学习笔记 以及个人理解 目前是包含了全部内容的版本,后续会推出精简版和复习知识点版 如有建议或错误错误欢迎在评论中指出或联系我:QQ:847590417 阅读目录 本章内容 2.1 形式语言基础 2.2 文法的非形式讨论 2.3 文法和语言的形式定义 2.4 语法树和二义性文法 2.5 句子的分析 2.6 有关文法的实用限制 2.7 文法的其他表示法 2.8 文法和语言分类 习题内知识 本章内容 重点:符号串、符号串集合的计算、文法、语言、递归、短语、句柄、语法树、文法的二义性、文法的使用限制、BNF表示文法、语法图、文法的分类。 2.1 形式语言基础 一、字母表和符号串 字母表:符号的非空有限集 符号:字母表中的元素 符号串:由符号拼接成的有穷序列 空符号串:没有任何符号的符号串 符号串的形式定义: 假设有一个字母表P:1.空符号串是P上的符号串;2.若x是P上的符号串,且a是字母表里的一个元素,则ax或xa(可以左,可以右,但只能一个不能同时加)是P上的符号串(一个符号也是符号串,a拼接ε);3.y是P上的符号串,当且仅当(iff)y是符合1.和2.的符号串。 二、符号串和符号串集合的运算 1