首先回顾下计算机组成原理的知识:java中数字以补码存储(补码存储原因(1)),
          正数的原码,反码,补码相同,
          负数的反码是在原码基础上符号位不变,其他位按位取反,负数补码是在反码基础上加一

例子1:求~10(byte类型)
byte a = 10;
原码,补码,反码:
00001010

按位取反后
11110101
再将补码转换成源码,由于负数生成补码的规则是:在反码基础上加1,因此需要按照此规则转成原码
先执行减一操作得到反码:
11110100
除去首位的符号位外取反得:
10001011  (对应十进制-11)

例子2:求~-6(byte类型)
原码:
10000110 ,
反码:
11111001,(负数的反码与原码符号位相同,数值为取反
补码:
11111010,
按位取反后:
00000101,(得到是正数,原码就是这个,对应十进制5)

负数右移:

1:有符号右移(>>):左边空位填充1

-4:

补码:                  11111111111111111111111111111100

有符号左移一位: 11111111111111111111111111111110

再减1                    11111111111111111111111111111101

非符号位取反:   10000000000000000000000000000010 (十进制是-2)

同样对-4对无符号右移一位(左边空出来的补0):

01111111111111111111111111111110

此时得到的是正数,因此直接转换成10进制就是2147483646

(1):为了简化电路设计,计算机中有加法无减法,我们拿3-2(byte类型,8位)做例子,3-2等于3 + (-2),补码分别为:

00000011   11111110

补码相加等于00000001, 对应十进制为1。

java按位取反“~“运算符,负数右移相关推荐

  1. java的左移运算符和右移运算符

    java移位运算小技巧 左移一位相当于乘以2的1次方,左移n位就相当于乘以2的n次方. 右移一位相当于除以2的1次方,右移n位就相当于除以2的n次方. 比如 10 << 1 = 20 10 ...

  2. 【Java】位运算符---算术右移和逻辑右移、算术左移和逻辑左移

    文章目录 1. 算术左移和逻辑左移 2. 算术右移和逻辑右移 3. Java中<<.>>和>>>的含义 1. 算术左移和逻辑左移 对于有符号数或无符号数:算术 ...

  3. 【java基础】-java移位运算符:右移运算符和无符号右移运算符

    下表列出了位运算符的基本运算,假设整数变量A的值为60和变量B的值为13: 操作符 描述 例子 & 如果相对应位都是1,则结果为1,否则为0 (A&B),得到12,即0000 1100 ...

  4. 【Java基础系列教程】第三章 Java变量与运算符

    一.Java程序基本结构 1.1 基本结构 Java程序基本结构示例代码: /** * 这里是文档注释 * 这是一个HelloWorld程序 */ public class HelloWorld {p ...

  5. Java千问:Java语言位运算符详解

    很多编程语言都有位运算符,Java语言也不例外.在Java语言中,提供了7种位运算符,分别是按位与(&).按位或(|).按位异或(^).取反(~).左移(<<).带符号右移(> ...

  6. 2.JAVA数据类型与运算符

    文章目录 02 JAVA数据类型与运算符 1. 标识符 1.1 关键字/保留字 1.2 字符集简介 2.常量和变量 2.1 常量和变量的定义 2.2 变量声明 3. 数据类型 3.1 基本数据类型 3 ...

  7. Java编程基础-运算符

    Java中的运算符大致分为:算术运算符.赋值运算符.关系运算符.逻辑运算符和位运算符五类. (1).算术运算符:+  -  *  /  %  ++  -- (2).赋值运算符:=  +=  -=  * ...

  8. c的按位取反运算符(~) 与逻辑逻辑(!)

    位运算     位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有:     &(按位与).|(按位或) ...

  9. Java 按位运算符(,|,^,,)

    &(按位与) 定义:针对二进制,只要有一个为0,就为0.2 & 5 = 02的二进制:00000000 00000000 00000000 000000105的二进制:00000000 ...

最新文章

  1. 关于VC编译器错误 Error C2558
  2. oracle删除表中数据_工作表中提供的特定数据在数据库中批量删除的方法
  3. C++ Primer 5th笔记(10)chapter10 泛型算法 :bind
  4. rejection from MPhil in Technology policy at cambridge
  5. java php 女生数量,萌妹子告诉你php和java如何选
  6. Dubbo为什么用Go重写?
  7. 【零基础学Java】—Scanner类的使用( 十)
  8. 8. CSS/JS 文件管理
  9. cplex入门系列(二)--- 线性规划求解
  10. SAP 入门学习途径——官方工具使用
  11. sata接口 图解 定义_SATA数据和电源接口定义详解(多图).pdf
  12. Android中免root的hook框架Legend原理解析
  13. ZZULIOJ:1044: 不及格率
  14. NEC协议红外遥控器
  15. 董宏丽(帮别人名字作诗)
  16. 配置Pico App ID
  17. SDL版仙剑奇侠传读后感
  18. android手机刷新率,终于知道为何苹果手机60Hz刷新率,却比大部分安卓的120Hz更强了...
  19. BZOJ 5010: [Fjoi2017]矩阵填数
  20. 数字经济时代,数据中心供电系统如何助力实现双碳目标

热门文章

  1. 基于visual Studio2013解决C语言竞赛题之1089牛虎过河
  2. Notice of the completion of the blog migration
  3. MSSQLSERVER数据库- 递归查询例子
  4. 斯特林数第一类数的应用 hdu3625
  5. 在VS2008中DataGridView控件里DataGridViewComboBoxColumn列的Bug
  6. 里bl2和bl3为什么分开_分手挽回:为什么不建议过早同居
  7. oracle 12c 自动任务,Oracle job自动任务实用指南
  8. Linux运行hadoop命令,将hadoop程序打成jar包,在linux下以命令行方式运行(例如单词计算程序)...
  9. python中paste函数的作用_PIL使用小结(crop和paste函数)
  10. java 头尾 队列_探索JAVA并发 - 并发容器全家福