关于数据类型、位运算、数据结构的一些总结和思考

1、首先要说的是java的8大数据类型

整数类型byte(1个字节)
short(2个字节)
int(4个字节)
long(8个字节)
字符类型char(2个字节)
浮点类型float(4个字节)
double(8个字节)
布尔类型boolean(单个出现4个字节,当作int类型;在boolean数组中被当作byte,占1个字节)

String类型具体所占字节,要根据其内容决定,一般英文字母或符号算一个字节,汉字算3个字节(utf-8编码),在Unicode码中汉字只占2个字节,其实最开始只有ACSII码,该码用8位来表示所有的英文字母和符号,后来各国纷纷推出自己的编码表,用来表示自己的文字符号,最后为了在国际上统一,提出了Unicode码,共有16位,2个字节,但是如果都用Unicode来传输数据,那么对于那些英文字符的信息,就白白浪费了一半的带宽,所以基于Unicode,又有了utf-8,而utf-8是什么呢,具体可见下方博客:字符集之在UTF-8中,一个汉字为什么需要三个字节? - 苦涩的茶 - 博客园

2、位的运算

数在计算机中都是以补码形式存在,而正数的原码、反码、补码都是一样的,负数的补码则是等于其原码取反后加1,正数和负数做加法运算时,先求出负数的补码,然后与正数做位运算,最后如果最高符号位为1,说明结果为负,需要对结果先-1再取反得到原码形式的结果,如果最高符号位为0,则说明结果为正数,不用再进行转换

3、为什么8位有符号的数取值范围为-128~127

我认为由于计算机存储的都是数的补码,而正数的补码和原码又是相同的,所以0~127就是0000 0000~0111 1111,而负数则是1111 1111(补码)~1000 0000,正好就是-1~-128

4、java是怎么实现栈和队列的

看了下ArrayQueue的源码,其内部是通过一个数组和两个索引(headtail,初始值都为0)来实现队列和栈的,下面介绍其中个关键代码:

往队尾加元素,add(E e),e不能为null:

elements[tail]=e; 

if((tail=tail+1&elements.length-1)==head){

//容量已满,扩容

doubleXXx();

}

从队首移出元素,pop():

E e=elements[head];

if(e!=null){

elements[head]=null;

head=head+1&elements.length-1;

}

从队首添加元素,addFirst(E e):

elements[head=head-1&elements.length-1]=e;

if(head==tail){

//容量已满,扩容

doubleXXx();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值