进制和位运算的基本知识:

进制和位运算的基本知识:
十进制:0-9,满10进1.
八进制:0-7,满8进1,用0开头表示.
十六进制:0-9,A-F,满16进1,用0x开头表示.
二进制:8个位(二进制)表示一个字节,一个字节最大是255
3位二进制表示1位就是8进制(因为三个二进制位最大的数是7)
4位二进制表示一位就是16进制(因为四个二进制位最大的数是15)
规律:进制越大表现形式越短




十进制-->二进制:
原理:对十进制进行除二运算(见图十进制变二进制)
二进制-->十进制
原理:二进制乘以二的过程
1 1 0
0*2(0)+1*2(1)+1*2(2)=6;
快捷算法:
0 1 1 0 1 0 1
64 32 16 8 4 2 1
0+ 32+ 16+ 0+ 4+ 0+ 1=53;
二进制的加法运算:
5+4=9:
1 0 1+
1 0 0
_________________
2(10) 0 1 ---满二进一,零减一等于一(将零当二使)
_________________
1001-->9
二进制的乘法运算:
5*4=20:
1 0 1
1 0 0
_________________
  000
 000
101
_________________
1010000-->20




其他进制的转换
二进制-->十六进制(四个二进制位就是十六进制位)
90(十进制)
0101 1010
5 10(A) ---16进制中10(A)11(B)12(C)13(D)14(E)15(F),满16进一
0X5A
二进制-->八进制
90
01 011 010
1 3 2 ---八进制的表示(0-7),满7进1




负数的二进制的表现形式:
二进制的正数变成负数:
6-->110
-6:其实就是6的二进制取反+1
取反:将二进制的一变成零,零变成一
0000-0000 0000-0000 0000-0000 0000-0110
取反:
1111-1111 1111-1111 1111-1111 1111-1001+
0000-0000 0000-0000 0000-0000 0000-0001
________________________________________
1111-1111 1111-1111 1111-1111 1111-1010




左移<<:(整数在内存中32位)
3<<2=12
0000-0000 0000-0000 0000-0000 0000-0011
向左移动2位
00-0000 0000-0000 0000-0000 0000-001100-->12 ---最低位补零


右移>>:
6>>2=1:
0000-0000 0000-0000 0000-0000 0000-0110
向右移动2位:
000000-0000 0000-0000 0000-0000 0000-01-->1 ---最高位是零补零,是一补一


规律:
3<<2 --> 3*2(2)=12
3<<3 --> 3*2(3)=24
6>>1 --> 6/2(1)=3
6>>2 --> 6/2(2)=1
左移:a<<b -->a*2(b):就是乘以2的移动位数次幂
右移:a>>b -->a/2(b):除以2的移动位数次幂


无符号右移>>>:
无论右边为零还是一都补零;


>>:最高位补什么由原有数据的最高位值而定
如果最高位0,右移后,用0补空位
如果最高位1,右移后,用1不空位
>>>:无论最高位是什么,右移后,都用0补




与&:
6&3=2
110 &
011
______
010-->2 ---0为假,1为真


或|:
6|5=7
110 |
101
______
111-->7


异或^:
6^5=3
110 ^
101
_____
011-->3


取反


正数-->负数:取反+1
负数-->正数:取反-1


一个数同时异或同一个数两次,结果等于它本身


两个变量互换位置(使用位运算):
int a=2;
int b=3;
a=a^b;
b=a^b;//(a^b)^b
a=a^b;//a^(a^b)


计算机在将二进制转换成十六进制(每次取最低四位):
0000-0000 0000-0000 0000-0000 1110-0110 & 15
0000-0000 0000-0000 0000-0000 0000-1111
_________________________________________
0000-0000 0000-0000 0000-0000 0000-0110-->6


0000-0000 0000-0000 0100-1100 1110-0110  >>4
___________________________________________
0000-0000-0000 0000-0000 0100-1100 1110 &15
0000-0000 0000-0000 0000-0000 0000-1111
_______________________________________
0000-0000 0000-0000 0000-0000 0000-1110-->14\
当为负数时用>>>4;


将一个大于9的数转化为16进制:
如12-->'C'
12-10+'A'='C'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值