数据的底层逻辑

数据的底层逻辑

1、负数的二进制

  • 电脑在进行负数运算的时候,负数并不是简单的将最高位置为1,而是对的这个负数的正数取反,然后加1
    • 采用这种方式的原因:将正数与负数进行运算的时候,如果负数不采用补码加一的操作,结果会出错
    • 如图所示:
      在这里插入图片描述

2、位运算

  • 移位运算

    • 左移(<<):低位补零,高位去掉,向左移一位相当于x2

    • 无符号右移(>>>):向右移动,右边舍去,左边补零

    • 有符号右移(>>):向右移动,右边舍去,最高位是什么就是什么

  • 逻辑运算

    • 按位与(&): 两个都是1才为1,例如 0001 & 1 = 1,
    • 按位或(|): 只要一个为1,就是1
    • 按位取反(~):1取反为0;反之
    • 按位异或(^):相异为真,相同为假

3、小数计算为什么出现不精确

现象:

float a = 0.1f*0.1f
// 结果为:0.010000001
  • 当使用二进制去处理小数时,因为二进制只能表示2的次方的数,不能精确去表示0.1,从而在执行小数运算的时候,将出现以上错误
    在这里插入图片描述

  • 十进制里面可以精确表示,但在十进制在1/3上也是会出现不精确,只能表示到0.333,采用十进制运算,速度会减慢

  • 可以采用java 中提供的BigDecimal,运算更加准确,单效率比较慢,其中Long类型可以适用于精确度不高但是大整数的运算,比如高额积分,BigDecimal适用于金融领域

4、字符的编码和乱码

  • 编码分为非Unicode、Unicode
    • 非Unicode:包括ASCII、GBK等,用于各国语言设置的编码方式
    • Unicode:为了统一所有字符的编号
  • 乱码的出现:解码时发生错误了,另外一种更加复杂是因为在解析的基础上进行了编码转换
  • 恢复乱码的方式:乱码的原因主要是一次错误的编码转换,因此通过逆向的方式进行恢复,其中主要恢复两个关键信息
    • 一个是原来的二进制编码方式A,另一个是错误解读的编码方式B
    • 首先获取以B编码方式的乱码二进制,然后在以A编码方式进行解码,但是一般一次不一定能正确恢复们需要多次尝试不同的编码方式

5、char的含义

  • char是一个固定的占两个字节的无符号整数,这个正整数对应于Unicode的编号,用于表示那盒Unicode编号对应的字符

    char c = "马";
    char c = 39532;//表示马的Unicode编号
    char c = 0x9a6c;//39532十六进制的表示
    char c = ='\u9a6c';//Unicode字符形式
    
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值