复习一个小知识点(反码与按位取反)

第一点是:反码与按位取反~

在Java中~符号是按位取反,例如,~5=-6。-5=4.  快速计算:一般~可以直接用(a+1)算,正数负数均可

思路:

是按位取反运算,与反码是不同的,
反码法规定,正数原反补码相同,负数的反码为原码除符号位以外取反。
而按位取反运算中:正数取反是先将初始数值转换成二进制数(6==》00000110),再对二进制数的每一位取反:即将0变为1、将1变为0。(00000110==》11111001),得到的是最终结果的补码,要转换为最终结果的原码则需再次取补码,(此处一种逆着算为11111001-1除符号位全取反10000111即为-7,另一种为11111001==》10000110+1==》10000111也为-7)就能得到计算结果。
负数取反:先将初始数值转换成二进制数(以-6为例,10000110),再取得二进制数的补码(10000110==》11111001+1==》11111010),之后对补码的每一位取反:即将0变为1、将1变为0(11111010==》00000101即为5)。得到的是最终结果的补码(由于正数的原码、反码、补码相同,该数即为原码),要转换为最终结果的原码则需再次取补码,就能得到计算结果。

注:在计算机中,运算都是通过补码进行计算的,这个点也是今晚我一直想不到的点,以至混淆了概念,胡乱取反。

第二个点是:IO流方面

IO流分为字节流(0-255)和字符流(0-65535)。

字节流:InputStream与OutputStream,这两个类都是抽象类,不能直接new,可以通过子类来new,FileInputStream、FileOutputStream.

字符流:Reader与Writer   子类InputStreamReader、OutputStreamWriter

转换流,字节流可以转换成字符流,JDK提供了两个人将字节流转换为字符流,分别是:InputStreamReader、OutputStreamWriter.

socket传输信息都是以二进制形式传输,也就是字节流进行处理。当传输到客户端或者服务端,如果数据比较大,就不能使用字节流来存储,需要包装一下字节流,将字节流装换成字符流,在字符流中还可以将信息放到缓存区,也就是BufferReader与BufferWriter中。

注意一点:FileWriter创建来一个输出流对象out,out.write(s)是把字符串s输进了流里,并没有输出到文件中,你必须调用out.flush()方法讲流中数据冲进目标文件,注意,io流用完后要记得用close()方法关闭,否则将有意想不到的麻烦,另外close()方法也具有flush()的作用。

 

第三个点是很多报文里头需要占据不止8位(一个字节)的空间,需要用位才做来存放,

int result = b1<<8+b2;//这个方法可以得到b1与b2共16位返回的值。

转载于:https://www.cnblogs.com/shigeng/p/8087981.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值