目录

  • 二进制中负数怎么表示?
  • Java位运算
    • 按位运算
    • 移位运算
  • int类型的取值范围是多少?

二进制中负数怎么表示?

在进行位运算之前,先看看负数的二进制形式在计算机中是如何表示的,在计算机中所有的数字都是以二进制补码的形式表示的,其中第一位(最高位)是标志位,为0表示正数,为1表示负数,剩余的位才是用来表示数字部分的。使用补码,可以将符号位和数值域统一处理。同时,加法和减法也可以统一处理。

原码:
正数的原码是按照绝对值大小转换成的二进制数。
负数的原码是按照绝对值大小转换成的二进制数,然后最高位补1表示为负数。
反码:
正数的反码与原码相同。
负数的反码为该数的原码除符号位(即最高位的1)外各位取反。
补码:
正数的补码与原码相同;
负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.

在java中一个字节(byte)占8位(bit),位(bit)表示二进制中的一个数字的位置,所以8位的意思是二进制数字有8位,以byte类型为正数5的数字举例:
5的原码为:0000 0101
正数的反码、补码都和原码一样,所以byte类型正数5在计算机中的存在形式就是0000 0101。

再看看byte类型负数-5在计算机中怎么表示的:
-5的原码:1000 0101
先求出-5的绝对值的二进制表达式为:0000 0101,再把符号位改为1,原码即为:1000 0101

-5的反码:1111 1010
根据-5的原码1000 0101,除了最高位符号位1不变外,其他的为0则为1,位1则为0,反码即为:1111 1010

-5的补码:1111 1011
根据反码1111 1010,将其+1则得到补码位:1111 1011

所以-5在计算机中二进制形式为:1111 1011。
如果需要根据计算负数的十进制结果为多少,则先根据补码1111 1011减1得到1111 1010,再计算其反码,0转换为1,1转换为0,最高位符号位不变,即结果为:1000 0101,这时可以根据二进制的规则得到值为:-5。

Java位运算

按位运算

  1. &(与)
    两位都为1,那么结果为1,可以将1看做是true,0为false,&就为java中的&符号,同为true结果才为true,那么同为1结果才是1。
    例:9 & 8
    二进制形式运算为:
    0000 1001 &
    0000 1000
    二进制结果为:0000 1000,十进制结果即为:8

  2. |(或)
    有一位为1,那么结果为1,同样可以将1看做是true,0为false,|就为java中的|符号,有一个为true结果就为true,那么有一个为1结果就是是1。
    例:9 & 8
    二进制形式运算为:
    0000 1001 |
    0000 1000
    二进制结果为:0000 1001,十进制结果即为:9

  3. ~(非)
    0变为1,1变为0
    例:~9
    9二进制形式为:0000 1001
    | 运算后十进制为:1111 0110
    此为负数,那么它的原码为补码-1,然后除符号位外,所有取反
    原码为:1000 1010
    十进制则为:-10

  4. ^(异或)
    两位不相同,结果为1
    例:9^8
    二进制形式运算为:
    0000 1001 ^
    0000 1000
    二进制结果为:0000 001
    十进制结果即为:1

移位运算

  1. << (左移)
    各二进制位全部左移N位,高位丢弃,低位补0
    例:9<<2
    9的二进制形式为:0000 1001
    左移两位后:0010 0100
    十进制则为:36

  2. (右移) > >
    各二进制位全部右移N位,若值为正,则在高位插入 0,若值为负,则在高位插入 1
    例:9>>2
    9的二进制形式为:0000 1001
    右移两位后:0000 0010
    十进制则为:2

4.(无符号右移) > > >
各二进制位全部右移N位,无论正负,都在高位插入0
例:9>>>2
9的二进制形式为:0000 1001
无符号右移两位后:0000 0010
十进制则为:2

int类型的取值范围是多少?

int类型占4个字节(byte),一个字节(byte)为8位(bit),所以int类型数字的格式如下:
00000000 00000000 00000000 00000000

正数的情况下,最高位必须为0,所以int类型二进制最大能表示的数为:
01111111 11111111 11111111 11111111
那么正数最大数是 231-1,

负数的情况下,最高位必须为1,所以int类型二进制最大能表示的数为:
原码:11111111 11111111 11111111 11111111
补码:1000000 0000000 0000000 0000001
所以这里看起来和正数情况是一样的,最小值为-231+1,那位什么负数是-231呢?

正数0的二进制为:
原码:00000000 00000000 00000000 00000000
负数0的二进制为:
原码:10000000 00000000 00000000 00000000

0的表示形式只需要一种就够了,所以就将负数0拿来表示最小的负数-231

Java位运算,负数的二进制表示形式,int类型最大值为什么是2的31次方-1相关推荐

  1. 我们应该知道的java位运算

    最近又回去重新看了java基础的书籍,在记录总结以前一些比较容易混淆的知识点.下面是本篇要记录的内容 一. 相关基础概念 在开始java位运算的知识之前,我们先来了解几个基础的概念,机器数,真值,原码 ...

  2. Java位运算总结:位运算用途广泛

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  3. Java位运算的基础及使用(意义)

    Java位运算的基础及使用(意义) 前言 一.位运算基础 二.位运算应用 三.位运算试题 前言 这几天在看HashMap的源码,但里面的位运算太多,看得有点晕.故,先整理位运算相关知识. 在了解位运算 ...

  4. c语言位运算负数的实例_JavaScript基础教程(四)二进制位运算

    JavaScript基础教程二进制位运算 JavaScript中的位运算是针对二进制数据提供的运算与操作.在JavaScript标准中规定了二进制位运算时其操作数长度为32位,其最高位为符号位,因此能 ...

  5. Java位运算优化:位域、位图棋盘等

    快速小测试:如何重写下面的语句?要求不使用条件判断语句交换两个常量的值. if (x == a) x= b; else x= a; 答案: x= a ^ b ^ x; //此处变量x等于a或者等于b ...

  6. Java位运算,常见的位运算

    前提 位运算符中 ,操作数只能为整型和字符型数据 运算符号 按位与(&):同1则1 → true&&true 操作数1 0 0 1 1 操作数2 0 1 0 1 按位与 0 0 ...

  7. 一篇搞定位运算——java位运算详解

    java位运算详解 前言 一.位运算符 &:按位与 |:按位或 ~:按位非 ^:按位异或 <<:左位移运算符 >>:右位移运算符 <<<:无符号右移运 ...

  8. java位运算究竟有用么?

    背景:java位运算除了课本上老师讲过,有时候面试的时候为了凸显高大尚,也会问些皮毛,难道真是一无是处么?本文主要从两方面进行叙述,什么是位运算,以及它的使用场景. 1    位运算简介 说明:  & ...

  9. 小博老师解读经典Java面试题—Java位运算

    [面试原题] 我们经常会看到类似于下面这样的Java面试题: 请编写出效率最高的2乘以8的运算结果. [正确答案] 2<<3 [面试技术点] 面试者是否了解.灵活运用java位运算技术. ...

最新文章

  1. 分布式事务 常见方法
  2. 角点检测:Harris角点及Shi-Tomasi角点检测
  3. 《CLR via C#》 第三版的主要内容
  4. 封条格式用word怎么打_标书密封条格式全word.doc
  5. FZOJ2110: Star
  6. Collection与Arrays
  7. iar c语言单片机指针,51单片机IAR编程示例
  8. nvivo12安装包下载
  9. 双十二|Solidigm官方店铺 惊喜大放送 福利享不停
  10. 【天池竞赛】心跳数据挖掘
  11. 最新款带采集功能壁纸/头像/动态壁纸小程序上线超炫裂变超强支持投稿
  12. 百度网盘提速法,不用插件,不用安装脚本
  13. 解决qq安全防护更新进程总提示的方法
  14. acm新手小白必看系列之(5)——枚举进阶例题精讲
  15. 五种JavaScript富文本编辑器,总有一款适合你
  16. css小鸡破壳,小班美术教案《小鸡破壳》
  17. A.Jelly (简单BFS三维)
  18. C51单片机与C52单片机内部的资源区别
  19. 室内地图在哪些方面提升了我们的生活便利性?
  20. “http://”与“http%3A%2F%2F”,转义与解析

热门文章

  1. 王者荣耀 ios 账号android,王者荣耀苹果账号怎么转安卓_账号转移教程_3DM手游
  2. Java全链路复习面经-基础篇(2.5万字全文)
  3. WEB引入Google思源黑体
  4. C# 中AutoMapper的使用方法
  5. 当数据库遇到分布式,你会怎么做?
  6. CERTI 4.0.0 成功编译安装(Windows10+VS2022)
  7. 以前的朋友都在做什么
  8. 中科大DIA复习内容
  9. 学成在线-课程详情页面优化
  10. vue表单验证--银行卡验证