计算机数字的储存分为:1、无符号数,2、有符号数

  • 无符号数:只能表示正数。每一位数都代表2的幂次方。只有地址用无符号数,无符号数不进行算术操作,之进行指针的加减。地址并不会造成错误的结果,而是产生一个空操作(气泡),所以无符号数不考虑溢出。
  • 有符号数:可以表示负数。有符号数有三种表示法:1、原码,2、补码(计算机系统中,数值一律用补码来表示和存储),3、反码

  (此处我们以8位有符号数举例)

  • 原码:最高位符号位代表简单的正负符号,其他位为1代表 2^i

    • 举例:0000_0001代表1,1000_0001 代表-1
    • 求相反数:改变符号位
    • 缺点:符号位需要额外的步骤来运算,因为结果不能提前知道。夭折得早。
  • 补码:规定 x+ ~x=1111_1111= -1。最高位符号位为1代表 -2^7,其他位为1代表 2^i,且有1111_1111= -1

    • 举例:  

      •   0000_0000=0
      •   0000_0001=2^0=1
      •   0000_0010=2^1=2
      •   0000_0011=2^1+2^0=2+1=3
      •   ……
      •   0111_1111=2^6+2^5+2^4+2^3+2^2+2^1+2^0=128-1=127(最大)
      •   1000_0000= -2^7= -128(最小)
      •   1000_0001= -2^7+2^0= -128+1= -127
      •   1000_0010= -2^7+2^1= -128+2= -126
      •   ……
      •   1111_1111= -2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0= -128+64+32+16+8+4+2+1=-1
    • 求相反数:因为 x+ ~x= -1,所以 -x= ~x+1  
    • 缺点:无,大家都在用
  • 反码:规定 x+~x=0。所有的正数取反就为相应的负数,正数的最高位必须预留为0,来保证取反之后负数为1而不会变成另一个正数。考虑所有正数: 0——0111_1111,就有所有负数:1111_1111——1000_0000

    • 举例:

      •   0000_0000=0,1111_1111= -0(0+(-0)=0)
      •   0000_0001=1,1111_1110= -1
      •   0000_0010=2,1111_1101= -2
    • 求相反数:反码每一位的意义没有补码直接,所以是按补码求相反数运算再多一个减一操作来用反码表示
    • 缺点:运算步骤比补码多。仅在早期的科学计算有优势。

小测试:java是补码还是反码?

补码。因为:

  证据1:

1         System.out.println(~0);
2 System.out.println(~1);
3 System.out.println(~2);
4 //-1
5 //-2
6 //-3
7 //如果是反码应该输出:0,-1,-2

  证据2:

1         System.out.println(Integer.MAX_VALUE);
2 System.out.println(Integer.MIN_VALUE);
3 //2147483647
4 //-2147483648
5 //如果是补码就应该是:2147483647,-2147483647,因为补码正负数个数相等,有正零、负零

  证据3:

1         System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));
2 System.out.println(Integer.toBinaryString(-Integer.MAX_VALUE));
3 //01111111111111111111111111111111
4 //10000000000000000000000000000001取反加一

最新文章

  1. ps批量处理图片
  2. GAMIT 10.50在Ubuntu 12.04系统下的安装
  3. 遗传算法在JobShop中的应用研究(part1: 绪论)
  4. jQuery 显示加载更多(节流) 实现预加载
  5. myeclipse报错:Could not create the view: An unexpected exception was thrown.
  6. Android应用不随手机屏幕旋转的方法
  7. MAC Intellij IDEA 常用快捷键
  8. Product Trader(操盘手)
  9. C#伪彩色处理
  10. PAT (Advanced Level) 1012. The Best Rank (25)
  11. Activity的Task详解
  12. Golang丰富的I/O----用N种Hello World展示
  13. Java Web项目缺少jsp、servlet jar包
  14. The question that comes to mind
  15. ProxySQL 配置详解及读写分离(+GTID)等功能说明 (完整篇)
  16. TensorFlow 训练MNIST数据集(2)—— 多层神经网络
  17. Java集合框架2
  18. CSS content换行技术实现字符animation loading效果
  19. html2canvas如何在元素隐藏的情况下生成截图
  20. 深入浅出VisualStudio——使用NuGet来安装AjaxControlToolKit

热门文章

  1. 一些excel随笔,瞎记一下
  2. CentOS 7.9 环境下构建 Python 3.9
  3. ES使用
  4. 关于vCenter6.7 导出的ovf 不能导入vCenter6.5/6.0的问题
  5. 用python从网页下载单词库
  6. 实验一 密码引擎-2-OpenEuler-OpenSSL测试
  7. OS-lab3
  8. 安装MinGW-C++开发环境2--软件安装
  9. What does int main(int argc, char *argv[]) mean?
  10. JSONObject没有parseObject方法