记录 java 位运算中的两点注意事项:移动位数超过数据长度和右移的两种不同方式。
int、long类型数据移动等于或超过最大位数
在 java 中,int 类型的数据长度为 32 位,如果将 int 类型左移或者右移大于或等于 32 位时,并不会像预计的那样将数据全部填充为1或0。java 的处理方式是:当刚好为数据长度的整数倍时,即32、64······,数据保持原来不变;其他情况下移动除以 32 余数的长度。同理 long 类型数据以 64 为变化基准。
在实际应用中,需要特别注意这点,当然也可以巧用此特性实现一些特殊算法的设计。
算术右移、逻辑右移、无符号右移
在 java 中左移只有一种,以0补齐低位,运算符号为 <<。而又移分为两种:算术右移 >> 和逻辑右移 >>>,其中逻辑右移也叫作无符号右移。
逻辑右移以0补全高位,而算术右移则是根据数据的第一位决定右移后高位补全的内容,若为1则补1,否则补0。
==========================================
疑问?帮助?批评?欢迎评论 | QQ:593159978