java按位取反“~“运算符,负数右移
首先回顾下计算机组成原理的知识: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按位取反“~“运算符,负数右移相关推荐
- java的左移运算符和右移运算符
java移位运算小技巧 左移一位相当于乘以2的1次方,左移n位就相当于乘以2的n次方. 右移一位相当于除以2的1次方,右移n位就相当于除以2的n次方. 比如 10 << 1 = 20 10 ...
- 【Java】位运算符---算术右移和逻辑右移、算术左移和逻辑左移
文章目录 1. 算术左移和逻辑左移 2. 算术右移和逻辑右移 3. Java中<<.>>和>>>的含义 1. 算术左移和逻辑左移 对于有符号数或无符号数:算术 ...
- 【java基础】-java移位运算符:右移运算符和无符号右移运算符
下表列出了位运算符的基本运算,假设整数变量A的值为60和变量B的值为13: 操作符 描述 例子 & 如果相对应位都是1,则结果为1,否则为0 (A&B),得到12,即0000 1100 ...
- 【Java基础系列教程】第三章 Java变量与运算符
一.Java程序基本结构 1.1 基本结构 Java程序基本结构示例代码: /** * 这里是文档注释 * 这是一个HelloWorld程序 */ public class HelloWorld {p ...
- Java千问:Java语言位运算符详解
很多编程语言都有位运算符,Java语言也不例外.在Java语言中,提供了7种位运算符,分别是按位与(&).按位或(|).按位异或(^).取反(~).左移(<<).带符号右移(> ...
- 2.JAVA数据类型与运算符
文章目录 02 JAVA数据类型与运算符 1. 标识符 1.1 关键字/保留字 1.2 字符集简介 2.常量和变量 2.1 常量和变量的定义 2.2 变量声明 3. 数据类型 3.1 基本数据类型 3 ...
- Java编程基础-运算符
Java中的运算符大致分为:算术运算符.赋值运算符.关系运算符.逻辑运算符和位运算符五类. (1).算术运算符:+ - * / % ++ -- (2).赋值运算符:= += -= * ...
- c的按位取反运算符(~) 与逻辑逻辑(!)
位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有: &(按位与).|(按位或) ...
- Java 按位运算符(,|,^,,)
&(按位与) 定义:针对二进制,只要有一个为0,就为0.2 & 5 = 02的二进制:00000000 00000000 00000000 000000105的二进制:00000000 ...
最新文章
- 关于VC编译器错误 Error C2558
- oracle删除表中数据_工作表中提供的特定数据在数据库中批量删除的方法
- C++ Primer 5th笔记(10)chapter10 泛型算法 :bind
- rejection from MPhil in Technology policy at cambridge
- java php 女生数量,萌妹子告诉你php和java如何选
- Dubbo为什么用Go重写?
- 【零基础学Java】—Scanner类的使用( 十)
- 8. CSS/JS 文件管理
- cplex入门系列(二)--- 线性规划求解
- SAP 入门学习途径——官方工具使用
- sata接口 图解 定义_SATA数据和电源接口定义详解(多图).pdf
- Android中免root的hook框架Legend原理解析
- ZZULIOJ:1044: 不及格率
- NEC协议红外遥控器
- 董宏丽(帮别人名字作诗)
- 配置Pico App ID
- SDL版仙剑奇侠传读后感
- android手机刷新率,终于知道为何苹果手机60Hz刷新率,却比大部分安卓的120Hz更强了...
- BZOJ 5010: [Fjoi2017]矩阵填数
- 数字经济时代,数据中心供电系统如何助力实现双碳目标
热门文章
- 基于visual Studio2013解决C语言竞赛题之1089牛虎过河
- Notice of the completion of the blog migration
- MSSQLSERVER数据库- 递归查询例子
- 斯特林数第一类数的应用 hdu3625
- 在VS2008中DataGridView控件里DataGridViewComboBoxColumn列的Bug
- 里bl2和bl3为什么分开_分手挽回:为什么不建议过早同居
- oracle 12c 自动任务,Oracle job自动任务实用指南
- Linux运行hadoop命令,将hadoop程序打成jar包,在linux下以命令行方式运行(例如单词计算程序)...
- python中paste函数的作用_PIL使用小结(crop和paste函数)
- java 头尾 队列_探索JAVA并发 - 并发容器全家福