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

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

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

    2.6K00

    那些年玩过的 高逼格进制转换 与 位运算

    ,,,负数的反码:符号位不变,0变1,1变0  -------反码是原码转为补码的中间过程 5)补码 计算机所认识并可计算的字节码,正数的补码还是其原码本身,,负数的补码是其反码+1 01.正数的原码,...反码,补码都一致 02.java中所有的数字都是有符号的  符号位 正数0  负数1 03.负数的反码=符号位不变+其他位取反(1变0 0变1) 04.负数的补码=反码+1 十进制转二进制 可以明确的说...那如果是负数呢?...-765 简单,就是拿到其正数的二进制数,改变符号位拿到原码: 1 1011111101 这个值是我们转换的二进制码 然后取反码(0变1,1变0,) 也就是 1(符号位不变)   0100000010   ...最后结果:0 001 转回十进制就是1 如果是负数就是先转码然后位移 算术左移 << 符号位不变,高位溢出删除,低位补零!

    1.4K20

    解析二进制文件的工具方法

    目录 1 一个字节范围 2 >> 的含义 3 十进制的负数变成二进制 4 0x1 代表什么意思 5字节组转list 6 list转字节组 7 截取bytes 1 一个字节范围 1个字节,取值范围是-128...正数的最大补码:01111111,即127.负数的最大补码10000000,原码为100000000,即进了一位变成了-128 01111111 为127 2 >> 的含义 是一个“有符号...右移动之后,高位会自动补0 运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1 byte num = -128; 的二进制为 10000000 3 十进制的负数变成二进制...负数转换为二进制,就是将其相反数(正数)的补码的每一位变反(1变0,0变1)最后将变完了的数值加1,就完成了负数的补码运算。...11 >>2(11为int型) 1)、11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011 2)、把低位的最后两个数字移出,因为该数字是正数,所以在高位补零

    1.9K40

    java中输出~6=-7的原因

    重要的事情说在前边 在计算机中,数值一直是使用补码进行存储的 取反(~)和反码是不一样的,取反是把数值转换成二进制之后每个位上取反,反码(正数和负数的反码规则不一样) 正/反/补码解释 正数的原码/反码.../补码 相同 正数取反(因为在计算机中数值的存储是按照数值的补码进行存储的,所以取反的时候先计算出数值的补码,然后取反) 负数的原码:是该数值的正值的符号位变成1 负数的反码:是其原码(除符号位)按位取反...负数的补码转换为原码:和原码变补码一样,除符号位外取反+1 负数补码:负数的反码+1正/负数取反方法 正数取反方法: 取补码:和正数的原码相同 按位取反:之后肯定是个负数 把对应的补码转换成原码就是输出的数...(此过程和原码取反码一样) 负数的取反方法 取补码:先把负数取反,然后+1就得到补码 按位取反:因为去反后为整数 * 把对应的补码转换成原码:因为正数的原码=补码,所以不变~6在计算机中的计算首先...,所以按照负数的补码转换成原码的公式来),由上述公式得到原码为:1000 0111 已经得到结果的二进制,将二进制转换成十进制,得到-7 ~(-6)在计算机中的计算 首先,-6的原码:1000 0110

    1.1K30

    java中输出~6=-7的原因

    重要的事情说在前边 在计算机中,数值一直是使用补码进行存储的 取反(~)和反码是不一样的,取反是把数值转换成二进制之后每个位上取反,反码(正数和负数的反码规则不一样) 正/反/补码解释 正数的原码/...反码/补码 相同 正数取反(因为在计算机中数值的存储是按照数值的补码进行存储的,所以取反的时候先计算出数值的补码,然后取反) 负数的原码:是该数值的正值的符号位变成1 负数的反码:是其原码(除符号位)按位取反...负数的补码转换为原码:和原码变补码一样,除符号位外取反+1 负数补码:负数的反码+1 正/负数取反方法 正数取反方法: 取补码:和正数的原码相同 按位取反:之后肯定是个负数 把对应的补码转换成原码就是输出的数...(此过程和原码取反码一样) 负数的取反方法 取补码:先把负数取反,然后+1就得到补码 按位取反:因为去反后为整数 把对应的补码转换成原码:因为正数的原码=补码,所以不变 ~6在计算机中的计算 首先,6...,所以按照负数的补码转换成原码的公式来),由上述公式得到原码为:1000 0111 已经得到结果的二进制,将二进制转换成十进制,得到-7 ~(-6)在计算机中的计算 首先,-6的原码:1000 0110

    1.2K30

    【愚公系列】软考中级-软件设计师 004-计算机系统知识(数据的表示)

    2.反码反码是计算机系统中的一种表示方式,用于处理负数。在反码中,正数的表示方式与其原码相同,而负数则是将其原码按位取反。...在计算机系统中,通常使用补码表示负数,以便进行算术运算。补码的计算方法如下:对于正数,它的补码和原码相同。对于负数,先取其绝对值的原码,然后将原码按位取反(0变1,1变0),再将结果加1。...因此,一个8位的移码数中,最高位为0,表示正数,而最高位为1,表示负数。计算机中使用移码编码的好处是可以简化负数的运算。在移码中,负数的编码总是比相应的正数高一个偏移量。...三、题目总结原码:正数是其二进制本身;负数是符号位为1,数值部分取X绝对值的二进制。反码:正数的反码和原码相同;负数是符号位为1,其它位是原码取反。...补码:正数的补码和原码,反码相同;负数是符号位为1,其它位是原码取反,未位加1。

    78000

    如何理解“正数的补码是其本身”

    那么,为什么会出现“正数的补码是其本身”这种说法呢? 在计算机中表示负数,如果用最高位表示符号这种“原码”方式,虽然有利于人的阅读,但不利于其本身的计算。...所以系统内部就把负数统一用“其对应正数的补码”来表示,而正数自己不用改变。...这样变换后,正数虽然形式上没有变,但与原码相比,含义却变了,因为符号位已经不再是符号位了,此时的正数和负数都具有了统一的“补码形式”或称都在一致的“补码编码空间”中。...原码空间到补码空间的转换,并非对每个数点都进行补码运算,只是负数需要,正数不需要而已。 简单来说,“正数的补码是其本身”,这句话想表达含义的意思是,正数在计算机“补码编码空间”中的表示和原码一致。...但这绝不等价于“对正数进行补码运算,结果是其本身”。

    2.9K40

    计算机基础之位运算 | 按位取反

    原码: 正数是其二进制本身; 负数是符号位为1,数值部分取X绝对值的二进制。 反码: 正数的反码和原码相同; 负数是符号位为1,其它位是原码取反。...补码: 正数的补码和原码,反码相同; 负数是符号位为1,其它位是原码取反,未位加1。...(反码末尾减1)(或者说负数的补码是其绝对值反码未位加1) 取反就是简单的 0变1,1变0 ; 而按位取反需要涉及以上概念。...下面以计算正数 9 的按位取反为例,计算步骤如下(注:前四位为符号位): - 原码 : 0000 1001 - 算反码 : 0000 1001 (正数反码同原码) - 算补码 : 0000 1001...(正数补码同反码) - 补取反 : 1111 0110 (全位0变1,1变0) - 算反码 : 1111 0101 (末位减1) - 算原码 : 1111 1010 (其他位取反) 总结规律: ~x

    7.3K10

    【C语言】原码、反码、补码详解 -《码上有道 ! 》

    符号位:0 表示正数,1 表示负数。 数值位:直接使用二进制表示数值大小。 1.2 历史来源与作用 原码在早期计算机中被广泛使用,因为其简单直观的表示方式便于理解和实现。...1.3 示例 十进制 原码表示 5 0000 0101 -5 1000 0101 说明: 0000 0101 表示正数 5。 1000 0101 表示负数 -5。...1,1 变 0)得到的。...正数的反码:与其原码相同。 负数的反码:将其原码的数值位取反,符号位不变。 2.2 历史来源与作用 反码的引入是为了解决原码在进行加减运算时的符号位问题。...补码使得正数和负数的加减运算可以使用同一套电路,避免了符号位单独处理的问题,极大地提高了计算效率。由于这些优点,补码成为现代计算机系统中普遍使用的整数表示方法。

    98810

    深入理解整数的原码、反码、补码与位运算

    一、整数的原码、反码和补码 计算机内部的整数存储方式通常基于二进制,在这之上,为了区分正负数,引入了 符号位(最高位,0 代表正数,1 代表负数)。...1.1 原码(Sign-Magnitude) 原码的表示方式很直观,即: 最高位 作为符号位(0 表示正数,1 表示负数)。 其余位 直接表示数值的绝对值。...1.2 反码(One's Complement) 反码的规则: 正数的反码 与原码相同。 负数的反码,符号位保持不变,其他位按位取反(0 → 1,1 → 0)。...1.3 补码(Two's Complement,实际存储方式) 补码是在反码的基础上 +1: 正数的补码 与原码相同。 负数的补码 = 反码 +1。...1,1 变 0(所有位取反)。

    99910

    为什么Java中int型数据取值范围是

    其中第一位是标志位,标志位为0表示正数,标志位为1表示负数,剩余的31位是用来表示数字部分的。   1.2、在计算机中,数值一律用补码来表示和存储,原因在于,使用补码,可以将符号位和数值域统一处理。...正数的反码与其原码相同,正数的原码、反码、补码都是相同的。       例:+9的补码是00001001。...2)、求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。即负数的反码是对正数逐位取反,符号位保持为1。...负数的反码等于原码符号位不变,其余各位逐位取反,补码等于反码加1。...2.1、因为int型数据类型是有符号位的,所以这里拆分为两部分,一部分是正数,一部分是负数进行观察。     1)、正数的范围是从1 ~ 2147483647的。

    5.6K30
    领券