JAVA源码阅读之----番外篇(位运算符详解,附带负数在内存中的存储方式)

在JAVA开发环境中,除了正常的逻辑运算符与数学运算符之外,还存在一种位运算符.
区别于逻辑运算与数学运算符,位运算符针对二进制进行操作.它们分别为:
&, |, ^, ~, >>, <<, >>>

&:
且的意思,即相同位的值均为1时,结果为1.
例如:3&5 计算过程
011 & 101 = 001, 结果为1 前两位不同时为1,所以为0,第三位同为1,结果为1

|:
或的意思,即相同位的值有一个为1时,结果为1.
例如:2|4 计算过程
010 & 100 = 110, 结果为6 前两位有一个为1结果位1,第三位均不为1结果为0

^:
异或的意思,当相同位置的值不同时,结果为1.
例如:3^2 计算过程
011 ^ 010 = 001, 结果为1 前两位相同结果为0,第三位不同结果为1

~:
讲这个运算符需要先讲负数
这里插一章,讲到取反,则这里讲一下负数在内存中存储的形式
负数的存储为一下步骤:
源码—>反码—>补码
取整数部分取反得到反码,然后+1得到补码即为负数在内存中存储的形式
例如:-5
5的源码为:0000 0000 == 0000 0000 == 0000 0000 == 0000 0101
5的反码为:1111 1111 ===1111 1111 === 1111 1111 === 1111 1010
5的补码为:1111 1111 ===1111 1111 === 1111 1111 === 1111 1011
所以最终-5存储在内存中的形式为
1111 1111=== 1111 1111=== 1111 1111=== 1111 1011

知道负数的存储形式,那么就比较好懂取反的意思,将数字进行取反操作,0赋值1,1赋值0.
例如:~9
即:1000 0000 0000 0000 0000 0000 0000 1001
取反结果为:
0111 1111 1111 1111 1111 1111 1111 0110

这里正数转负数 ~9 + 1
负数转正数 ~(-9 - 1)

<<:
带符号左移运算符,即将一个数的全部位数向左移动指定位,右侧补零
例如: 10 << 2
10 –> 0000 1010
10 << 2 —> 0010 1000
结果位32 + 8 = 40;

“>>”:
带符号右移动运算符,将一个数的全部位数向右移动指定位.
例如:10 >> 2
10–> 0000 1010
10 >> 2 –> 0000 0010
结果 10 >> 2 = 2

“>>>”:
无符号右移:
不带符号右移,将一个数的全部位向右移动指定
例如: 10 >>> 2
10 –> 0000 1010
10 >>> 2 —> 0000 0010
结果 10 >>> 2 = 2

移位运算符关于负数和超位数的情况:
这里以int 32位为例:
正数最大值为 : 2^31-1,负数最大值为 2^31.
为何负数范围比正数大一呢.这里以8位举例,因为0 用正数的00 00 00 00 表示了.而负数的10 00 00 00 应该也是表示0的,但是这里用来表示其它数了,那么表示了什么呢.取反得到 01 11 11 11,然后补位得到 10 00 00 00.so 这里表示为-128

这里其实正负数范围一样,因为正数有0,而负数没有.所以其实两则相同.

正数最大 7F FF FF FF 左移一位 得到 FF FF FF FE 首位为1,则减一取反得到 00 00 00 02,所以结果为-2
负数最大

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学生成绩管理系统是一个使用Java语言编写的项目,用于管理学生的成绩信息。该项目采用文件存储方式来保存学生的成绩数据。 在该系统,每个学生的成绩信息包括学号、姓名、班级、科目及分数,每个学生的信息存储在一个独立的文件。系统提供了添加学生信息、查找学生信息、修改学生信息和删除学生信息等基本功能。 在源代码实现,首先需要创建一个学生类(Student),包含学号、姓名、班级、科目和分数等属性。然后,通过文件操作的方式,将学生对象存储在文件。文件的存储可以使用文本文件(如CSV文件)或二进制文件(如序列化对象)来实现。在文件读写操作,可以使用Java的IO流进行处理。 对于添加学生信息功能,可以通过从用户获取输入并创建学生对象,然后将学生对象写入文件来实现。查找学生信息功能可以通过读取文件的数据,并根据用户提供的学号或姓名进行匹配,返回对应的学生信息。修改和删除学生信息功能可以通过读取文件的数据,并根据用户提供的学号或姓名进行查找定位,并更新或删除对应的学生信息。 该项目的文件存储方式可以实现学生成绩信息的长期保存和管理。同时,文件存储也具有灵活性,可以方便地对学生信息进行新增、修改和删除操作。另外,文件存储也方便与其他系统进行数据共享和交互。 总结而言,学生成绩管理系统是一个用于管理学生成绩信息的Java项目,通过文件存储实现了学生信息的保存和管理。该项目可以方便地操作学生信息的增删改查,并且具有长期保存和与其他系统数据交互的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值