首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

聊聊Java中的位运算:与、或、非、异或、左移、右移、无符号右移【小家Java】

ascll编码是美国标准信息交换码的英文缩写,包含了常用的字符,如阿拉伯数字,英文字母和一些打印符号共255个。 unicode编码包含很多种格式,utf-8是其中最常用的一种。...---- Java中的二进制 熟悉Java的同学应该知道在Java7之前是不支持前置直接表示二进制数的,但从7版本之后就可以了: 二进制:前置0b/0B 八进制:前置0 十进制:默认的,无需前置 十六进制...负数以其正值的补码形式表达,方法为其绝对值求反加1;2、用同样方法可以看出Integer类型是占用32位(4个字节) ---- Java中的位运算 Java语言支持的位运算符还是非常多的,列出如下:...|:按位或。 ~:按位非。 ^:按位异或。 <<:左位移运算符。 >>:右位移运算符。 >>>:无符号右移运算符。 除~以 外,其余均为二元运算符,操作的数据只能是整型(长短均可)/字符型。...System.out.println(Integer.toBinaryString(100 >> 3)); } 右移用得也很多,操作其实就是吧右边的N位直接砍掉即可 ---- >>>:无符号右移(注意:

2.8K30

2021-10-22:颠倒二进制位。颠倒给定的 32 位无符号整数的二进制位。提示:请注意,在某些语言(如 Java)中,没有无

2021-10-22:颠倒二进制位。颠倒给定的 32 位无符号整数的二进制位。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。...在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。...在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。力扣190。...就是n的0~7位和8~15位交换了,16~23位和24~31位交换了 0110 1010 0011 1111 0011 1001 1011 0111 也就是说,整个过程是n的左16位,和右16位交换 n...的左16位的内部,左8位和右8位交换;n的右16位的内部,左8位和右8位交换 接下来的一行,其实是,从左边开始算,0~7位内部,左4和右4交换;8~15位,左4和右4交换;...

79520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    正数、负数和补码_正数原码反码补码

    正数和负数的补码 补码是计算机存放数据之前对数据做了一种转换操作得到的,与补码相关的几个名词还有原码、反码: 1、原码:字节的最高位为符号位,其余表示数值大小,最简单; 2、反码:正数的反码和原码一样,...以C语言的有符号数为例: int a = 0x80000000; int型总共占4字节,因此内存中的a变量应该是下面这样子: 1000 0000 0000 0000 0000 0000 0000 0000...这串二进制数字如果直接按照数学规则转成十进制的话,应该是 2147483648,但是根据之前的定义我们知道,有符号数的最高字节应该是符号位,所以对于计算机而言,这个二进制数是一个负数,所以上面这个二进制串其实是一个负数的补码形式...,这是因为补码计算中符号位是可以参加计算的,我们始终以结果的最高位作为符号位,不过在C语言环境中,如果直接用0x80000000 – 1,其实是会把溢出的符号位舍弃掉(因为我们要把结果存入一个int型的四字节变量里...了解了正、负数在计算机内存中的存放方式以及整数反转,那么如何在不改变数据类型的前提下正确存放一个十进制大正数到内存里呢?

    1.8K50

    数据格式究竟是个什么鬼?

    7.2. 32位有符号整数 这结合了2个16位Modbus寄存器。它可以以4种不同的字/字节顺序显示。...有符号整数大端 有符号整数小端序 有符号整数大端字节交换 有符号整数小端字节交换 例 字节顺序:AB CD(大端) 十进制数字123456789或十六进制07 5B CD 15 在Modbus消息中通过线路时的顺序...:07 5B CD 15 7.3. 32位无符号整数 这结合了2个16位Modbus寄存器。...无符号整数大端字节序 无符号整数小端序 无符号整数大端字节交换 无符号整数小端字节交换 例 字节顺序:AB CD(大端) 十进制数字123456789或十六进制07 5B CD 15 在Modbus消息中通过线路时的顺序...EE DD EF 0B 82 16 7E EB 在 Modbus 消息中通过线路时的顺序:EE DD EF 0B 82 16 7E EB 7.5. 64位无符号整数 这结合了4个16位Modbus寄存器

    12K11

    Leetcode No.190 颠倒二进制位

    一、题目描述 颠倒给定的 32 位无符号整数的二进制位。...提示: 请注意,在某些语言(如Java)中,没有无符号整数类型。...在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。...在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。...关键思想是,对于位于索引 i 处的位,在反转之后,其位置应为 31-i(注:索引从零开始)。 我们从右到左遍历输入整数的位字符串(即 n=n>>1)。

    31820

    190 颠倒二进制位

    题目信息 题目地址:https://leetcode-cn.com/problems/reverse-bits/ 颠倒给定的 32 位无符号整数的二进制位。...提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。...在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。...在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。...题解二:分治法 分治将大问题递归划分成小问题,通过解决小问题最终解决大问题的思想 将32位二进制串反转,可划分为将前16位反转和将后16位反转然后调换两个16位,其中前后16位怎么反转,也可划分为前8

    75420

    位操作运算有什么奇技淫巧?(附源码)

    a & b 按位或 a | b 按位异或 a ^ b 按位取反 ~a 左移 a << b 带符号右移 a >> b 无符号右移 优先级 C语言中位运算符之间,按优先级顺序排列为 优先级 符号 1...从可变位宽扩展的符号 通过3个操作从可变位宽扩展符号 有条件地设置或清除位而不分支 有条件地否定一个值而不分支 根据掩码合并两个值中的位 计数位设置 计数位设置,幼稚的方式 计算由查找表设置的位 数位集...用减法和加法交换值 用XOR交换值 用XOR交换单个位 反转位序列 反转位是显而易见的方式 逐字查找表中的位反转 通过3个操作(64位乘法和模数除法)反转字节中的位 通过4个操作反转字节中的位(64位乘法...,无除法) 通过7个操作反转字节中的位(无64位,仅32位) 与5 * lg(N)个运算并行地反转N位数量 模数除法(又名计算余数) 在不进行除法运算的情况下,将模数除以1 << s(显而易见) 在不进行除法运算的情况下以...为底的整数 查找整数的整数对数10 查找32位IEEE浮点数的整数对数基数2 查找32位IEEE浮点的pow(2,r)根的整数对数基数2(对于无符号整数r) 计算连续的尾随零位(或查找位索引) 线性计算右边的连续零位

    87041

    位操作运算有什么奇技淫巧?(附源码)

    a & b 按位或 a | b 按位异或 a ^ b 按位取反 ~a 左移 a << b 带符号右移 a >> b 无符号右移 优先级 C语言中位运算符之间,按优先级顺序排列为 优先级 符号 1...从可变位宽扩展的符号 通过3个操作从可变位宽扩展符号 有条件地设置或清除位而不分支 有条件地否定一个值而不分支 根据掩码合并两个值中的位 计数位设置 计数位设置,幼稚的方式 计算由查找表设置的位 数位集...用减法和加法交换值 用XOR交换值 用XOR交换单个位 反转位序列 反转位是显而易见的方式 逐字查找表中的位反转 通过3个操作(64位乘法和模数除法)反转字节中的位 通过4个操作反转字节中的位(64位乘法...,无除法) 通过7个操作反转字节中的位(无64位,仅32位) 与5 * lg(N)个运算并行地反转N位数量 模数除法(又名计算余数) 在不进行除法运算的情况下,将模数除以1 << s(显而易见) 在不进行除法运算的情况下以...为底的整数 查找整数的整数对数10 查找32位IEEE浮点数的整数对数基数2 查找32位IEEE浮点的pow(2,r)根的整数对数基数2(对于无符号整数r) 计算连续的尾随零位(或查找位索引) 线性计算右边的连续零位

    1.3K41

    颠倒二进制位

    颠倒二进制位 题目: 颠倒给定的 32 位无符号整数的二进制位。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。...在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。...在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。...整数反转 题目: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。...假设环境不允许存储 64 位整数(有符号或无符号)。

    68310

    基础篇:JAVA基本类型

    因为int对于32位处理器,一次处理的数据是32位,CPU寻址也是32位的查找,具有高效储存的特点(如果有更好的理解,大家共同交流下) 2:64位的JVM中,int类型长度是多少 32位;int是32位类型...,不会随着系统或者jvm配置的位数而改变 3:char类型变量能不能储存一个中文的汉字,为什么 java 默认编码是unicode编码方式每个字符占用两个字节,char是16位类型,因此可以储存中文字符...1 8 23 double 1 11 52 符号位部分用来储存数字符号,区分正负数,0 正 1 负 指数位储存指数,指数也有正负,指数确定大小范围 指数是有符号的,但有符号整数比无符号整数计算麻烦,因此实际储存是将指数转为无符号整数...,此时底数是 1111 01 指数位表示:指数为3,加上127(反转时则减去127)得130,指数位二进制为1000 0010 符号位:正数 0 15.625 在内存的二进制形式表示为 符号 指数 尾数...(byte b = 1; short s = b; );无编译错误 short 和 char 都是16位,但是不能相互隐式转换 字符型数据向整型数据的自动转换 char是无符号类型,表示范围在(0~2

    1.2K20

    JAVA位运算等运算符总结

    JAVA位运算等运算符总结 一、概述 运算符是一种“功能”符号,用以通知 Java 进行相关的运算。...逻辑非 (用来反转操作数的逻辑状态) ^ 逻辑异或 (符号两边结果相同为假,不同则为真) 可以将boolean的true和false看作是1和0,这样&和|的意义就是按位与和按位或。...左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 按位操作,首先要知道不同类型字节长度,网上都是显示一个字节8位,不是每个数字都是8位的。但你可以将计算过程以8位来算。...计算机计算是用的补码 负数以补码看原码,先减1看反码,再反转看原码。...= -8 无符号右移>>>(补码): 数字1:00000000000000000000000000000001 右移4位(>>>4)结果:00000000000000000000000000000000

    64011

    颠倒二进制位

    颠倒二进制位 官方题解链接: 颠倒二进制位 题目 颠倒给定的 32 位无符号整数的二进制位。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。...在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。...在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。...表示无符号整数 43261596, 因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。...提示: 输入是一个长度为 32 的二进制字符串 解题方法 逐位反转 解题思路: 针对该题, 第一个思路是将其转化为字符串(to_string), 然后直接反转(reverse), 一顿操作结果发现思路不对

    44940

    MySQL基础

    最小值 最大值 tinyint 1 有符号-128 无符号0 有符号127 无符号255 smallint 2 有符号-32768 无符号0 有符号32767 无符号65535 mediumint 3...有符号-800w 无符号0 有符号800w 无符号167w int,integer 4 有符号-21亿 无符号0 有符号21亿 无符号42亿 bigint 8 有符号-92w兆 无符号0 有符号92w...兆 无符号184w兆 int(5)指定显式宽度【不显式指定默认int(11)】,当数值宽度小于五位的时候,默认填满。...unsigned表示是否带符号 浮点数类型 字节 最小值 最大值 float 4 double 8 定点数类型 字节 最小值 最大值 decimal(M,D) M+2 有符号-128 无符号0...有符号127 无符号255 表示一共显示M位数字,包括整数位和小数位,其中D位代表小数点有几位 decimal不指定精度默认整数位为10,小数位为0.

    71420

    3.11 标志位操作指令

    用途:通常用于在执行某些算术操作前清除进位标志,以确保结果的正确性。例如在无符号加法中,先清零进位标志,然后再进行加法运算。...用途:在某些算术和逻辑运算中,可能需要对进位标志进行反转。...用途:用于需要强制设置进位标志的场合,如模拟借位操作。 示例: stc ; 置位进位标志 2....在反转字符串的过程中,我们想要: 确保在字符串反转时,指针从高地址向低地址移动。 禁止中断,确保整个反转操作不被打断。 处理完毕后,恢复正常状态,包括启用中断和重置方向标志。...; 将 ES:ESI 所指向的字节复制到 ES:EDI 所指向的位置 dec esi ; ESI 指针向前移动一个字节 inc edi

    10010

    Java,bit比特,byte字节,char字符,short,int,long,float,double,string,字母,汉字编码等

    如题,做个重新认识的总结,只供参考,如果不准确的,请回复,谢谢 数据类型 比特位(bits) 表示范围 有无符号 bit 1 0~1 无 byte 8 -128~127 有 short 16 -32,768...3个或者 4个》》 首先认识下Java中的数据类型: 1、Int整型:byte(8位,-128~127)、short(16位)、int(32位)、long(64位) 2、Float型:float(32.../details/7770588 byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127; char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 );大小范围...是0—65535; char是一个16位二进制的Unicode字符,JAVA用char来表示一个字符 1、Char是无符号型的,可以表示一个整数,不能表示负数;而byte是有符号型的,可以表示-128...); //输出是 -,可以看到把汉字 中 转到 f byte,在从 f转回 char型,已经丢失了高位字节 3、char、byte、int对于英文字符,可以相互转化,如: 不过需要注意的是转换过程中涉及高位不零

    1.8K20

    CC++、C#、JAVA(二):基本类型和转换操作

    java 基本数据类型如下 C#类型 java类型 描述 默认值 bool boolean 布尔值 False byte byte 8 位无符号整数 0 char char 16 位 Unicode...32 位单精度浮点型 0.0F int int 32 位有符号整数类型 0 long long 64 位有符号整数类型 0L sbyte 无 8 位有符号整数类型 0 short short 16 位有符号整数类型...0 uint 无 32 位无符号整数类型 0 ulong 无 64 位无符号整数类型 0 ushort 无 16 位无符号整数类型 0 C语言中, char 为 一字节,使用 ASCII 编码,C#...C# 和 Java 中 ,无论是 32 位 机器还是 64 位机器, int 都是 4 字节,long 8字节。 数据类型使用示例 C/C++ c语言的基本类型使用示例如下。...【图片来自:biancheng.net】 C语言中,不同进制的表示方法: 默认为10进制 ,如10 ,20,直接赋值即可。 8进制,开头加上0,如012,013。 二进制,开头加上0b,如0b11。

    1.9K10

    分析关于Hash哈希游戏竞猜项目系统开发(逻辑讲解)

    作为以太坊区块链的主要编程语言,Solidity必须做好数学。 在本系列中,我们讨论了Solidity如何进行数值运算以及开发人员如何在Solidity中进行数值运算的各个方面。...是的,根据文档,有32个有符号整数,32个无符号整数,2592个有符号定点和2592个无符号定点类型。JavaScript只有两种数值类型。...Python 2以前有四个,但是在Python 3中删除了“ long”类型,所以现在只有三个。Java有7个,而C ++有14个。...一些数值运算将单词视为有符号整数,而某些数值运算则将单词视为无符号整数,而其他运算则不管参数是否在无符号上签名,都以相同的方式工作。...因此,EVM本机支持两种数值类型:带符号的256位整数和无符号的256位整数。这些类型在Solidity中分别称为int和uint。

    84720

    protobuffer的前世今生(二)——编码

    → 010 1100 000 0010 接下来你反转 这两组7位的bit,记着,varint 存数字是首先存意义最小的那组(相比最高有效位)。...如果使用int32 and int64类型进行编码负数的话,varint的结果往往是10个字节的那么长——被当做一个非常大的无符号整数来对待。...如果使用有符号类型的话,结果会使用ZigZag进行编码,这个有效的多。 ZigZag 编码存在一个有符号整数到无符号整数的映射。因此,绝对值小的数(如-1) 也会有一个比较小的varint编码值。...注意,在右移31位的这部分,这个移动的结果要么是一个全0的数字(如果n是正数),要么是一个全是1的bits(如果n是负数) 当解析sint32 或 sint64 这类数值时,就会解码回有符号的版本,如-...值中的int长度指定为7位(黑色的加粗部分),你瞧,我们这不就发现了后面有7个字节(红色部分)——我们的string。

    58730

    疑惑: Go const 导致程序结果错乱 ?

    但你是否注意到 golang 里面分有符号和无符号类型的数, 如 int8 和 uint8 根据上面的结果, 有符号数的减法基本在我们认知范围之内....所以当看到程序用uint`x`来定义变量时, 这个变量就是无符号类型的. 为什么 Go 不像 Java 那样一个 int 类型吃遍天呢, 搞出无符号类型的目的何在有符号数是可以表示负数的....如 int8 的范围区间是[-128, 127]. 而有些场景下我们只想要正数, 那么就可以用无符号数来表示, 同样 uint8 就可以代表 [0, 255] 节省计算机资源....声明同一个变量, 使用 int8 占一个字节, uint32 就占用 4 个字节. 其实我觉得更大的可能性是, Go 是那帮写 C 的人设计的, 他们继续沿用了 C 里面这个传统的数值表示方式....0001]补 + [1111 1110]补 = 1111 1111(补码) 由于无符号数的加减结果仍然是无符号数, 那么 1111 1111 就是一个无符号的数, 所以最高位不是符号位.

    60920
    领券