首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    int类型的取值范围(为什么负数比正数表示的范围多一位)

    前言: 还记得那个刚刚学习C语言,老师给我们讲课的时候,我就稍微了解一下为什么int类型的数据,负数可以表示到-2³¹,而正数只能表示到2³¹-1。...有符号类型的表示形式: ●有符号的类型,用第一位来表示符号位,1代表负数,0代表正数,其他31位就是用,表示数值,比特位只能放1和0。...2.原码、反码、补码 我们输入的数,一开始是原码,要变成补码以后,才能存储的计算机中,打印的是原码。 正数的原码、反码、补码都相同。...负数从原码到反码是符号位不变,其他的取反,这里的取反就是,0变成1,1变成0,因为二进制里面只有0和1....负数从反码到补码:直接+1 -1的原码:1000 0000 | 0000 0000 | 0000 0000 | 0000 0001 -1的反码:1111 1111 | 1111 1111

    2.8K00

    重学js之JavaScript基本概念(中)- 操作符

    2、应用于不包含有效数字的字符串时,将其变量的值设置 位NaN,字符串变量变成数值变量 3、用于布尔值false的时候,将其转换为0,在执行加减1的 操作,布尔值变成数值 4、用于布尔值true的时候...var num = 25 num = +num // 25 num = -num // -25 注意:还是遵循之前的规则,对于字符串的变量使用加减操作符 则变成 NaN 其他的则相应变成指定规则的数值...所以,对正数的无符号右移与有符号右移结果相同,但对负数的结果就不一样了。其次无符号右移操作符会把负数的二进制码当成正数的二进制码。...系列》的第三章第二篇,后续还为大家带来js基础的更多文章。...重学JS系列: 1、重学js之JavaScript简介 2、重学js之在HTML中使用JavaScript 3、重学js之JavaScript基本概念(上)- 数据类型

    95330

    「硬核JS」数字之美

    我们可能注意到了,这样好像没办法表达负数 So,为了表示正与负,先辈们就发明了 「原码」,把左边第一位腾出来,存放符号,正数用 0 来表示,负用 1 来表示 上图就是正负数的 原码,你可能在疑惑为什么上面表里我只画到了数字...,反码 的表示方式其实就是用来处理负数的,也就是除符号位不变,其余位置皆取反存储,0 就存 1,1 就存 0 那么我们再来看 同上,4 位反码的值存储范围也是 -7 ~ +7 当 原码 变成了 反码...1 如上图所示,处理 反码 中的 -0 时,给 1111 再补上一个 1 之后,就变成了 10000,由于我们是 4 位存储,所以要丢掉除符号位的最左侧高位,也就是进位中的那一位,也就变成了 0000...~2046,这里指的是正数,因为还有负数,那指数范围就是 -1022~1023,如果没有偏移量的存在,指数就需引入符号位,因为有负数,还需要引入补码,无疑会使计算更加复杂,为了简化操作,才使用无符号的阶码...中数字范围 如果大家真的理解了上文,那么就会发现数字的范围其实有两个概念,最大正数和最小负数,最小正数和最大负数 而最终的数字范围即 最小负数~最大负数 并上 最小正数~最大正数 从S、E、M即数符、阶码

    7.5K20

    「硬核JS」令你迷惑的位运算

    +[]]*~+[]] 嗯,就以这一段网红代码为开头吧 看此文之前,请一定要先阅读这篇文章 「硬核JS」数字之美 「硬核JS」数字之美 「硬核JS」数字之美 重要的事情说三遍,上面这篇文章就是给此文做准备的...整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数) 在 ECMAScript 中,所有整数字面量默认都是有符号整数 有符号整数也就是上文所说,二进制左侧首位是符号位来表明该数字正负...-2 十进制数字 0 的按位非即十进制 -1 上面说的都是正数,我们看一个负数的例子 十进制数字 -1 由于是负数,上文我们说过计算机中二进制存储负数为补码方式,所以我们要先求 -1 的补码,-1 二进制原码是...,无符号右移会给空位都补 0 ,不管符号位是什么,这样的话正数的有符号右移和无符号右移结果都是一致的 负数就不一样了,当把一个负数进行无符号右移时也就是说把负数的二进制码包括符号为全部右移,向右被移出的位被丢弃...,左侧用0填充,由于符号位变成了 0,所以结果总是非负的 那么可能就有人要问了,如果一个负数无符号右移 0 位呢,我们可以测试一下 让十进制 -1 进行无符号右移 0 位 -1 是负数,在内存中二进制存储是补码即

    2.5K20

    2021-05-08:给定两个非负数组x和hp,长度都是N,再给定一个正数range

    2021-05-08:给定两个非负数组x和hp,长度都是N,再给定一个正数range。x有序,xi表示i号怪兽在x轴上的位置;hpi表示i号怪兽的血量 。...福大大 答案2021-05-08: 1.贪心策略:永远让最左边缘以最优的方式(AOE尽可能往右扩,最让最左边缘盖住目前怪的最左)变成0,也就是选择:一定能覆盖到最左边缘, 但是尽量靠右的中心点。...等到最左边缘变成0之后,再去找下一个最左边缘... 2.贪心策略加线段树,可优化成O(N * logN)的方法。 代码用golang编写。...minAoe2(x, hp, range2) fmt.Println(ret) } } // 贪心策略:永远让最左边缘以最优的方式(AOE尽可能往右扩,最让最左边缘盖住目前怪的最左)变成...0,也就是选择: // 一定能覆盖到最左边缘, 但是尽量靠右的中心点 // 等到最左边缘变成0之后,再去找下一个最左边缘... func minAoe1(x []int, hp []int, range2

    84110

    JAVA中有趣的移位操作

    原码: 二进制表示,最左边的一位是符号位,0表示正数,1表示负数 反码: 正数时同原码,负数时,等于原码每位取反(除了符号位) 补码: 正数时同原码,负数时,等于反码+1 在计算机系统中,数值一律用补码来表示和存储...如果觉得奇怪,想想有时候我们遇到过的场景:一个很大的int正数,乘一个正数后如果结果超过了int能存储的极限,往往就变成了负数,或者一个很小的正数。...另一个需要注意的地方,由于Java只存储补码,正数补码和原码相同先不管,负数的补码会把原码的0变成1,所以负数左移位时,移出去的最高是1,后面怼上来的一般也是1(没到极限),所以还是负数。...System.out.println("x左移2位\t= " + (x << 2)); // 正数超过极限可能变成负数,负数变成正数也不奇怪吧 System.out.println...对于正数没影响,对于负数来说,这样一移,直接变成正数了。

    1.9K30

    深入理解计算机系统cp2:定点数的表示和运算

    正数加正数或者负数加负数是正常的,但是正数加负数就会出错。...我们发现,本来应该做的是加法运算,但实际上变成了减法运算(-1-3=-4)。 我们首先想到,可以通过将“正数加负数”转化为“正数减正数”来手动纠正这个错误。...假设我们现在有一个寄存器可以存放四位二进制数(此时,模为16),我们想要让 1011 变成 0000,最容易想到的办法就是 1011-1011=0000,注意这里是正数加负数。...想要变成正数加正数,就要找到等价于 -1011 的正数,-1011 就是 -11,-11 以 16 为模的补数就是 +5,+5 就是 +0101,这个正是我们要找的那个等价正数,因此这时候,1011-1011...变成了 1011+0101,其结果是 10000,不要忘了寄存器只能存放四位,所以结果其实是 0000,恰好与我们“正数加负数”时得到的结果无异。

    1.7K10

    原码、反码、补码详解

    反码 正数的反码是其本身。 负数的反码是在其原码的基础上,符号位不变,其余各个位取反。...原码: 正数 正数(原码) 负数 负数(原码) 0 0000 0 1000 1 0001 -1 1001 2 0010 -2 1010 3 0011 -3 1011 4 0100 -4 1100 5 0101...为了解决 “正负相加等于 0” 的问题,在 “原码” 的基础上,人们发明了 “反码”: 正数 正数(反码) 负数 负数(反码) 0 0000 0 1111 1 0001 -1 1110 2 0010 -...正数 正数(补码) 负数 负数(补码) 0 0000 0 0000 1 0001 -1 1111 2 0010 -2 1110 3 0011 -3 1101 4 0100 -4 1100 5 0101...我们要处理” 反码” 中的”-0”,当 1111 再补上一个 1 之后,变成了 10000,丢掉最高位就是 0000,刚好和左边正数的 0 完美融合。

    1.9K30

    一日一技:二进制减法是如何进行的

    在计算机中,负数是使用它的补码来表示的。所谓补码,就是反码+1。所谓反码,就是二进制数逐位取反。所谓逐位取反,就是1变成0,0变成1。...例如: 原来的二进制数: 1011011101101反码: 0100100010010补码: 0100100010011 在数学里面,当我们判断一个正数和负数的时候,是通过这个数字前面的负号来判断的,例如...例如: 正数: 0101负数: 1101 其中最左边的0和1表示的是符号位,0为正数,1为负数。...:100000100 由于我们是在8位整型的环境下,所以最左边这个1被直接丢掉了(溢出),结果变成:00000100 对结果再求补码。...由于位数溢出,在计算机中才会出现两个正数相加,结果却是负数的情况。例如: 127 + 1,在数学上结果为128,但是在计算机中,8位整型的情况下,结果为-128。

    3.1K40

    通过debug搞清楚.vue文件怎么变成.js文件

    前言 我们每天写的vue代码都是写在vue文件中,但是浏览器却只认识html、css、js等文件类型。...所以这个时候就需要一个工具将vue文件转换为浏览器能够认识的js文件,想必你第一时间就想到了webpack或者vite。...本文以@vitejs/plugin-vue举例,通过debug的方式带你一步一步的搞清楚vue文件是如何编译为js文件的,看不懂你来打我。...通过打印我们发现stylesCode竟然变成了一条import语句,并且import的还是当前App.vue文件,只是多了几个query分别是:vue、type、index、scoped、lang。...lang || "js" } } }; } transformMain函数中的代码执行主流程,其实就是对应了一个vue文件编译成js文件的流程。

    1.4K10

    Selenium系列(22) - 通过selenium控制浏览器滚动条的几种方式

    selenium没有提供原生的滚动页面方法,所以我们得通过最原始的JS来控制 原理:通过 执行js代码,达到目的 driver.execute_script() 方式一:scrollBy(x,y)...driver.execute_script("window.scrollBy(0,1000)") x:必传,正数则向右滑动的像素值,负数则向左滑动的像素值 y:必传,正数则向下滑动的像素值,负数则向上滑动的像素值...方式二:scrollTo(x,y) driver.execute_script("window.scrollTo(0,1000)") x:必传,正数则向右滑动的像素值,负数则向左滑动的像素值 y:必传...,正数则向下滑动的像素值,负数则向上滑动的像素值 方式三:document.documentElement.scrollTop 作用一:获取当前滚动高度 # 获取当前滚动高度 scrolTop = driver.execute_script

    1.8K30
    领券