符号计算

PHP基础2--基本语法

匿名 (未验证) 提交于 2019-12-02 22:11:45
知识点: 标记符,注释 变量 常量 数据类型 运算符 流程控制 标记符,注释   4种标记符号:     1. 默认形式: <?php php语句 ?>       如果<?php ...?>之后没有html代码,则 ?> 标记可以省略     2. 短标签形式: <? php语句 ?>       默认是关闭的,需要开启配置项【php.ini】: short_open_tag=on     3. script标签形式: <script language=”php”> php语句 </script>     4. asp形式: <% php语句 %>       默认是关闭的,需要开启配置项【php.ini】: asp_tags =on   大小写      变量: 区分大小写     常量: 区分大小写, 可以在php.ini文件中配置为不区分大小写     其他不区分大小写: 如函数名,系统关键字...   注释     单行注释: //注释内容 或 #注释内容     多行注释: /*注释内容*/ 变量   概念:     代表一定存储空间及其中数据的一个“标识符”     赋值同时定义变量, $v1 = 1; 图示:   命名规则     以字母或下划线开头 后跟任意数量(含0个)字母,数字和下划线     常见命名:         骆驼命名法 : 首单词小写

原码、反码、补码原理

旧街凉风 提交于 2019-12-02 18:53:10
  最近看一些编程的底层内容,一般对于原码、反码、补码的解释如下:     原码、反码、补码是计算机中对数字的二进制表示方法。     原码:将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。     反码:如果是正数,则表示方法和原码一样;如果是负数,符号位不变,其余各位取反,则得到这个数字的反码表示形式。     补码:如果是整数,则表示方法和原码一样;如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)。   好了,就是这么简单,懂一点二进制的童鞋按照这个正逆推算,木有问题。但是真的就这么简单吗?肯定不是了,楼主对于原码、反码、补码一直很疑惑:正数的补码等于他的原码, 负数的补码等于反码加一。科学家是不是太草率了点,计算机原理就是这么正反加减搞出来的?楼主查了一些资料、文章,总算弄明白了其中的原委。这里有一篇文章, 从原码讲起,通过简述原码,反码和补码存在的作用,加深对补码的认识。   附上原创地址,原作者保留权利   https://www.imooc.com/article/16813?block_id=tuijian_wz   接触过计算机或电子信息相关课程的同学,应该都或多或少看过补码这哥仨。每次都是在课本的最前几页,来上这么一段: 什么反码是原码除符号位,按位取反。补码等于反码加一。 然后给整得莫名其妙

Java 中int与byte数组转换详解

一笑奈何 提交于 2019-12-02 16:28:18
1、与运算符的理解(&): 参加运算的两个数据,按二进位进行“与”运算。如果两个相应的二进位都为1,则该位的结果值为1,否则为0。即 0&0=0;0&1=0;1&0=0;1&1=1; 例子:int x = 62255550; y =0xff; 转二进制:x = 62255550 = 11101101011111000110111110; y = 0xFF = 11111111 ; 11 10110101 11110001 10111110 &00 00000000 00000000 11111111 00 00000000 00000000 10111110 (从右到左做与运算,不足的补0) 如果参加&运算的是负数(如-3 & -5),则以补码形式表示为二进制数,然后按位进行“与”运算。 2、移位运算:java移位运算符三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。 --1、 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数。 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数。 左移的规则只记住一点:丢弃最高位,0补最低位 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33%32=1位。 2)运算规则 按二进制形式把所有的数字向左移动对应的位数

位运算之两数相除

∥☆過路亽.° 提交于 2019-12-02 11:41:51
leetcode 上第29题两数相除,刚开始的时候我的思路是通过while 循环和加减法来实现,后来在编码实现的时候对于除数和被除数的符号相同时可以得出正确答案,但是符号不同时就会出现错误。在评论区看一些大佬的解题思路让我受益匪浅,其中我认为较好的一种思路是使用位运算,用左移去减,因为整数边界问题比较麻烦,所以改用负数计算。具体代码如下: public int divide ( int dividend , int divisor ) { // ^ 是异或运算符,相同为0 不同为1 boolean sign = ( dividend > 0 ) ^ ( divisor > 0 ) ; int result = 0 ; // 将整数全部转化为负数再进行运算 if ( dividend > 0 ) { dividend = - dividend ; } if ( divisor > 0 ) { divisor = - divisor ; } while ( dividend <= divisor ) { int temp_result = - 1 ; int temp_divisor = divisor ; // // 左移一位相当于乘以二,右移一位相当于除以二 while ( dividend <= ( temp_divisor << 1 ) ) { if ( temp

(转)自动微分(Automatic Differentiation)简介——tensorflow核心原理

谁说我不能喝 提交于 2019-12-02 11:10:51
现代深度学习系统中(比如MXNet, TensorFlow等)都用到了一种技术——自动微分。在此之前,机器学习社区中很少发挥这个利器,一般都是用Backpropagation进行梯度求解,然后进行SGD等进行优化更新。手动实现过backprop算法的同学应该可以体会到其中的复杂性和易错性,一个好的框架应该可以很好地将这部分难点隐藏于用户视角,而自动微分技术恰好可以优雅解决这个问题。接下来我们将一起学习这个优雅的技术:-)。本文主要来源于陈天奇在华盛顿任教的课程 CSE599G1: Deep Learning System 和《 Automatic differentiation in machine learning: a survey 》。 什么是自动微分 微分求解大致可以分为4种方式: 手动求解法(Manual Differentiation) 数值微分法(Numerical Differentiation) 符号微分法(Symbolic Differentiation) 自动微分法(Automatic Differentiation) 为了讲明白什么是自动微分,我们有必要了解其他方法,做到有区分有对比,从而更加深入理解自动微分技术。 手动求解法 手动求解其实就对应我们传统的backprop算法,我们求解出梯度公式,然后编写代码,代入实际数值,得出真实的梯度。在这样的方式下

poj1722:substract

社会主义新天地 提交于 2019-12-02 09:26:55
这个题其实可以转化成在一些数字之间插上加号或者减号,然后等式的计算结果是t,求方案的一个题。其中第一个数和第二个数的符号是固定的:+,- f[i][j]表示前i个数的运算结果是j时,第i个数前面的符号。所以如果存在f[i][j-a[i]],则可以转移到f[i][j]=1上。同理如果存在f[i][j+a[i]],则可以转移到f[i][j]=0上。这样我们就构造好了这个数组。 然后开始找出对于要求答案每一位是+还是-。从后往前找,f[n][t]的符号就是最后一位前的符号。因为知道第n位的正负,然后我们由此就可以知道第n-1位的符号。以此类推,我们可以知道每一位前的符号。 现在问题就成了如何从知道每一位的符号然后知道每一次改的是哪2个数。 碰到一个加号就把当前2个数(i,i-1)相减。处理完所有的加号之后我们就可以一直输出1了。 #include <bits/stdc++.h> using namespace std; const int maxn=105; int T=10000; int n,t,a[maxn],f[maxn][20005]; int opt[maxn]; int main() { scanf("%d%d",&n,&t); for(int i=1;i<=n;i++) scanf("%d",&a[i]); memset(f,-1,sizeof(f)); /

数值型数据的表示(2.0)

寵の児 提交于 2019-12-02 09:14:47
无符号数 计算机CPU中寄存器是用来存放数据的,通常称寄存器的位数为CPU的机器字长。所谓无符号数,就是没有符号的数(只能表示正数),在寄存器中的每一位均可用来存放数值,而与其相对的另一个概念——有符号数要复杂一些。因为有符号数还能表示负数,这就需要有一个数据位来表示数据的正负,所以无符号数是相对于有符号数而言的,指的是整个机器字长的全部二进制位均表示数值位,相当于数的绝对值。由于无符号数和有符号数的这一区别,在同一机器字长的条件下,无符号数与有符号数所能表示的数值范围也是不同的。例如,机器字长同为16位的情况下,无符号数的取值范围为0~65535,而有符号数如果采用补码表示法(关于补码下面会学到),取值范围则为:-32768~+32767. 有符号数 1.真值与机器数的概念 学习有符号数首先要理解两个专业术语:真值和机器数。 我们平时使用符号“-”来表示一个负数,例如-100,-32,使用“+”或省略“+”来表示一个正数,例如+65,130.这些例子中的实际值就是真值。真值往往是面向人的,可以用二进制数表示,也可以用其它数值表示,但根据习惯,常用十进制数表示。 而在计算机中,因为只能表示0和1两种数码,所以计算机中任何信息都是采用0和1的组合序列来表示。也就是说,对于有符号数来说,也只能用0或者1来表示“正”或“负”。一般情况下,都用0来表示“正”,用1来表示“负”

永不服输的Java之路---重学Java (第三章)

一曲冷凌霜 提交于 2019-12-02 06:39:31
如若文章中出现冲突,或者出现错误,请联系 QQ:2669157689 指出我的问题。谢谢~ 本章说明一下变量的声明,数据类型及其转换;Java中的关键字,保留字;运算符和表达式等 JAVA编程基础 —— 变量和运算符 1. Java的程序结构 Java块分为数据类型,变量,运算符和控制流语句。 数据类型 数据类型确定要存储在内存中的数据的类型。 变量 变量是存储数据的基本单元。 运算符 运算符是一个符号,用于操作一个或多个参数以得出结果。程序是按顺序执行的。 控制流语句 控制流语句允许改变语句执行的顺序。 2. 标识符、关键字和保留字 标识符 Java中的包、类、方法、参数和变量的名称 标识符的命名规则 ① 必须以字母、下划线(_)或美元符号($)开头; ② 余下的字符可以是下划线、美元符号或任何的字母或数字,长 度不限。标识符中不能有空格; ③ 不能使用Java中的关键字或者保留字做为标识符。 元素 规范 示例 类名 Pascal 规则 Person StudentDemo 变量名 Camel 规则 age height avgValue 方法名 Camel 规则 getAge setUserName 包名 全部小写 com.neusoft 常量名 全部大写 MAX_VALUE 关键字/保留字 Java中的关键字/保留字 abstract continue goto null

为什么byte的最大是2的7次方减一而最小是负2的7次方

雨燕双飞 提交于 2019-12-02 05:56:42
简书 来我们一步步分析分析: 1.byte占用8位,每位用0或1表示,能够表示256(2^8)个数据。 2.这8位分为符号位(最高位)和数值位(剩余七位),符号位0表示正数,1表示负数。 3.按上一步的理解,容易得到(+127:0111 1111、+1:0000 0001、+0:0000 0000、-0:1000 0000、-1:1000 0001、-127:1111 1111),计算机底层定义了+0(0000 0000)就是0,那么“可怜的-0”又该何去何从呢?计算机遇到这个二进制该如何处理呢?总不能把这两个都对应0吧,这显然是资源浪费。 4.到这里我们都认为最高位是不参与计算数值的,仅仅是一个符号位,按这种思路byte的八位是无论如何也表示不出-128。而“可怜的-0”又不知道自己代表谁,不得而知“可怜的-0”就是-128。(为什么呢?凭什么呢?你说代表-128就代表-128呀!为什么不能是+128、-250、+250.......)。 5.到这里我们已经很粗浅地回答了-128~127中的-128的由来,基本也回答了这个题目。 6.可是然而但是——对于程序员来说,上诉的分析【首先】是结论正确,但是过程错了。错误在于——负数的二进制表示是错误的,比如-127:1111 1111,这是不对的。计算机发现了1111 1111会把它认为是-1而不是-127。【其次】没有解释为什么

原码, 反码, 补码 详解

杀马特。学长 韩版系。学妹 提交于 2019-12-02 02:36:52
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 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 二. 原码, 反码, 补码的基础概念和计算方法. 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数,