位操作符

基本数据类型,进制以及常用的用法

进制

  • 二进制位 简称“位”,一个二进制包含的信息称为一比特(bit).每一个bit可以代表0或1的数位信号,是电脑记忆体中最小的单位;
  • 字节:bye:是计算机可寻址的最小单位,每个字节有8个二进制位。
  • word 字,有2byte组成,

十进制:10 八进制:012 十六进制:0x0a 二进制:1010

CPU主要有32位,64位,32位cpu能够寻址的范围是4GB,,通常一个cpu指令是4byte,执行一次就读取32bit内容

基本数据类型

c.c++在不同的操作系统平台,给基本类型变量分配的字节是不一样的。java是跨平台语言,JVM包装后的基本数据字节长度是一样的

1
2
3
4
5
6
7
8
byte:1字节
short:2字节
int:4字节
long:8字节
float:4字节
double:8字节
char:2字节
boolean:在存储的时候不使用字节,仅仅使用1位来存储,范围为01

int long等整数类型

最高位是符号位,正数是0 ,负数是1

原码

将一个数字转换为二进制就是这个数字的原码

反码

正数的反码是原码

负数的反码是在原码的基础上,符号位不变,其他位都取反

-3 原码 1000 0000 0000 0011

-3 反码 1111 1111 1111 1100

补码

正数的补码是原码,也就是反码

负数的补码的基础上加1

-3 的补码: 1111 1111 1111 1101

补码是因为计算机在进行数值计算的时候,是通过补码来表示每个数值,好处是减法的计算方式与加法一样

1
2
3
4
5
6
5    -   3 = 5   +  (-3)  =2
00000000 00000000 00000000 00000101
+ 11111111 11111111 11111111 11111101
===================================
100000000 00000000 00000000 00000010 = 2
//最高位溢出

double float

位操作符

与 &

两个位 都为1 结果是1

应用:

  • 清零:与一个各位都是0的数值相与,结果是0
  • 去一个数中的指定位:取4位,,,,A & 0000 1111= 0000 AAAA,得到A的最后四位

或 |

只要有一位是1,结果就是1

应用:

  • 置1:将指定位置置为1

非 ~

对操作数的每一位进行操作,1变0,0变1

异或 ^

两个数 数值相同则为0,数值不同则为1

应用:

  • 简单的数值加密:与某一个数值异或,再与该数值异或,变为原来的数值
  • 翻转特定为:X = 1010 1110将低4位翻转,X^0000 1111 = 1010 0001

右移>>

符号位不变,整体向右方向移动n位,高位空出来的位数值为0

a>>b = a/(2^b)

左移<<

符号位不变,低位空出来的位补数值0

a<<b = a*(2^b)

使用

其他进制转二进制字符串

在java里Integer、Long这两个类里都以下三个方法:

//将i转换成二进制

toBinaryString(long i);

toBinaryString(int i);

//将i转换成十六进制

toHexString(long i);

toHexString(int i);

//将i转换成八进制

toOctalString(long i);

toOctalString(int i);

二进制转其他进制

Integer、Long两个类里都将字符串转换成各种不同进制的方法:

parseInt(String s, int radix);

parseLong(String s, int radix);

参考文献