原码,反码,补码 与(&) 或(|) 非(~) 异或(^) 左移 << 右移 >> 无符号右移 >>>
原码
数字在计算机中以二进制表示,8位的字长,最高位是符号位, 正数为0,负数为1.比如,3为0000 0011; -3为1000 0011。
注意,Java中int为32位。3的16进制表示为3,-3的16进制为fffffffd.
反码
正数的反码和原码相同。
负数的反码为符合位不变,其余按位取反。
3 为0000 0011; -3为1111 1100。
补码
正数的补码和原码相同。
负数的补码为反码+1.
3 为0000 0011; -3为1111 1101
与(&)
按位与,位数对齐,全部为1的结果为1.
1&2 == 0 2&3 == 2
0000 0001 0000 0010
0000 0010 0000 0011
--------- ---------
0000 0000 0000 0010
或(|)
按位或,位数对齐,只要有一个为1,则结果为1
1|2 == 3 2|3 == 3
0000 0001 0000 0010
0000 0010 0000 0011
--------- ---------
0000 0011 0000 0011
非(~)
按位取反。
~1 == -2
0000 0001
---------
1111 1110
我们直到负数的表示为反码+1. 所以,该结果中的反码为(1111 1110 - 0000 0001)=1111 1101,则绝对值原码为0000 0010, 即2。即结果为-2.
异或(^)
相同为假,不同为真。
1^2 == 3 2^3 == 1
0000 0001 0000 0010
0000 0010 0000 0011
--------- ---------
0000 0011 0000 0001
左移 <<
所有的位左移,低位即右侧补0.
1<<2 == 4 3<<3 == 24
0000 0001 0000 0011
0000 0100 0001 1000
左移几位则相当于10进制乘以2的多少次方。所以1<<2==1*2*2==4; 3<<<3==3*2*2*2==24
右移 >>
正数右移,高位用0补,负数右移,高位用1补.
1>>2 == 0 13>>2 ==3 -3>>2 == -1
0000 0001 0000 1101 1111 1101
--------- --------- ---------
0000 0000 0001 0011 1111 1111
无符号右移 >>>
正数无符号右移同右移,负数无符号右移则高位补0.
1>>>2 == 0 13>>>2 ==3 -3>>>2 == 1073741823
0000 0001 0000 1101 fffffffd
--------- --------- ---------
0000 0000 0001 0011 3fffffff
衍生运算符
由位运算操作符衍生而来的有:
&= 按位与赋值
|= 按位或赋值
^= 按位非赋值
>>= 右移赋值
>>>= 无符号右移赋值
<<= 赋值左移
原码,反码,补码 与(&) 或(|) 非(~) 异或(^) 左移 << 右移 >> 无符号右移 >>>的更多相关文章
- C语言原码反码补码与位运算.
目录: 一.机器数和真值 二.原码,反码和补码的基础概念 三.为什么要使用原码,反码和补码 四.原码,补码,反码再深入 五.数据溢出测试 六.位运算 ...
- 「C语言」原码反码补码与位运算
尽管能查到各种文献,亲自归纳出自己的体系还是更能加深对该知识的理解. 本篇文章便是在结合百度百科有关原码.反码.补码和位运算的介绍并深度借鉴了张子秋和Liquor相关文章后整理而出. 目录 ...
- 位移&二进制转换&原码&反码&补码
<< 左移 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零. 格式 需要移位的数字 << 移位的次数 计算过程 1. 按二进制形式把所有的数字向左 ...
- C语言学习笔记之原码反码补码
原码:就是我们自己看的,以及机器输出给我们看的 补码:机器永远是以补码的形式将数据保存在计算机中 正数: 原码=反码=补码 负数: 反码:原码的符号位不变,其他位取反 ,1变0 0变1 补码:机器 ...
- JAVA:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题(5)
一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...
- 原码 & 反码 & 补码 & 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题
一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...
- python之计算机硬件基本认知_数据单位_进制间转换_数的原码反码补码
一:计算机硬件基本认知 cpu: 中央处理器. 相当于人的大脑.运算中心,控制中心. 内存: 临时存储数据. 优点:读取速度快,缺点:容量小,造价高,断电即消失. 硬盘: 长期存储数据. ...
- C 标识符, 数据存储形式(原码,反码,补码)
一. 标识符 第一个字母必须是英文字母或下划线 二. 数据存储形式(补码存储) 最高位是符号位 ---- 0表示整数 ; 1 表示负数 1. 正数:原码 = 反码 = 补码 例子 : (10) 原码 ...
- java基础知识-原码,反码,补码
1.正数:原码,反码,补码:都一样. 2.负数:和正数的储存方式不同,负数都是以补码形式存储的. <1>负数的补码 把负数的原码除了符号位取反后再+1. <2>负数的原码 把对 ...
随机推荐
- Java接口和抽象类的理解
接口和抽象类的相同之处就是 都会有抽象方法 抽象方法就是一个没有方法体 等待继承的子类完成的方法 然而接口比较严格 它的方法必须是抽象方法且是公开的 抽象类 可以有自己的属性 和 实体方法 首相用面向 ...
- 关于多台机器之前session共享,sessionState mode="StateServer" 问题的困扰
.net 多台机器共享session是很老的技术,一直很少用到session. 最近就出现了一个问题:三台前端,其中一台保存的session值死活不对,一样的环境,一样的配置文件,就是和另外两台获得的 ...
- Arduino库函数中文说明
#define 常量名 常量值 % 取模运算符 String abc / char abc[n] 定义字符串 pinMode(pin,mode); 用于引脚的初始化 mode包括 INPUT ...
- ListCtrl控件
一 CListCtrl类型 LVS_EDITLABELS LVS_OWNERDRAWFIXED LVS_REPORT LVS_SHOWSELALWAYS LVS_SINGLESEL LVS_SMALL ...
- Runtime.addShutdownHook的用法
原文出处:http://kim-miao.iteye.com/blog/1662550.感谢作者的无私分享. 一.Runtime.addShutdownHook理解 在看别人的代码时,发现其中有这个方 ...
- linkinFrame--web应用举例--准备工作
OK,前面的博客我们已经搭好了linkinFrame的项目结构,现在我们这里添加一个简单的web应用,在编写此web应用的过程中我们来一步一步的搭好自己的框架. 现在开始,这里举一个例子,一个客户的C ...
- 使用SoapUI调用Vsphere Web Service
项目中经常需要调用Webservice进行验证测试,下面就介绍下如何使用测试工具SoapUI调用Vsphere vcenter的 Web Service VSphere的Webservice地址默认为 ...
- junit源码解析总结
前面的博客我们也已经整理到了,我们使用junit38,在写测试类的时候我们的测试类必须继承TestCase.这个所有测试类的父类在junit.framework包下面. 前面我们的整理都是说直接在ID ...
- java编程中常用英语单词
JAVA 省略语与名词解释 -------------------------------- J2EETM----JavaTM 2PlatformEnterpriseEdition : J2EE(JA ...
- .NET框架(转)
三年前写的<.NET之美>的第六章,现在书名改为了<.NET专题解析>. 本书是一本讲解.NET技术的书籍,目标读者群也是在.NET框架(.NET Framework)下进行开 ...