进制

进制:同一数字符号根据位置不同而具有不同的量。

用多位简单的数字来表示一个复杂的数字时,满足一定数量n时,
向前进位1,称为n进制。

   简单来说就是满(逢)n进1。

数字的由来:
古人在生产劳动过程中,有计数的需求。比如:我有一群羊,我想知道我有多少只羊,可是这个羊总是跑来跑去,有时候这些羊出去吃草分散成一大片,就不能很方便的知道到底有多少。于是就通过摆放树枝,木棍的方式来计数,因为木棍不会跑动,一个木棍代表一只羊。

	例如这个样子:

	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

	可是,羊少的时候还好说,羊多了的时候数的人头疼,而且不便于很直观的知道到底羊的数量处于哪一个数量级。

	于是古人就开始分堆摆放,暂时满足了落后的农业生产需求。例如:

	||||||||||  |||||||||| ||||||||||  |

进制的由来:

  后来部落与部落之间争抢地盘,打架,首领就要约估自已的族人数量,和羊的数量(咋又是羊呢?因为人要吃饭啊,现代打仗打的是钱,古代打仗打的是羊!),人太多,羊也太多,一只羊一只木棍,摆木棍摆的精疲力尽,需要的木棍数量也太多。那能不能用较少的木棍数量来表示较大的数字呢?
	
	神奇的印度阿三人发明了这样的一种分堆摆放木棍方式(同一数字符号根据位置不同而具有不同的量):

	1231只羊这样表示(10进制):

	|     ||     |||   | 

	这样的摆放方式将1000多只羊简化到只需要几根木棍就能统计完成。这样摆放的精髓就在于同一数字符号根据位置不同而具有不同的量,由此产生了最初的进制概念。

	最初不是以10为进制的,本例当中把1231只羊表示为|     ||     |||   | 仅仅是为了大家理解方便,因为大家对10进制熟悉。

	后来,阿三又发明了用1表示|,2表示||,3表示|||,又进一步简少了木棍的数量。

	再后来,由于阿三跟阿拉伯人皮,被征服了。阿拉伯人惊奇的发现印度阿三的计数方式竟然要先进于他们,于是阿拉伯人虚心的学习了阿三的计数方式,也将此计数方式带入了欧州,也由此走向全世界。欧州人误以为是阿拉伯人发明的,所以称为阿拉伯数字。

10进制:

  10进制当中1的含义:
  
  0    0    0    1   => 1    10^0  (10的0次方)    个(一)

	0    0    1    0   => 10   10^1  (10的1次方)    十  

	0    1    0    0   => 100  10^2  (10的2次方)    百

	1    0    0    0   => 1000 10^3  (10的3次方)    千

  ........

	10000 0000 这是10的几次方?
	
	123456789用10进制表示:

	10^0*9 + 10^1*8 + 10^2*7  + 10^3*6 + 10^4*5 + 10^5*4 + 10^6*3 + 10^7*2 + 10^8*1 
	
 = 9 + 80 + 700 + 6000 + 50000 + 400000 + 3000000 + 20000000 + 100000000

 = 123456789

2进制:

  2进制当中1的含义:
		
  0   0    0    0    1   => 1    2^0  (2的0次方)     个(一)

  0   0    0    1    0   => 2    2^1  (2的1次方)     二  

  0   0    1    0    0   => 4    2^2  (2的2次方)     四

  0   1    0    0    0   => 8    2^3  (2的3次方)     八

  1   0    0    0    0   => 16   2^4  (2的4次方)     十六

 ........

	10000 0000 这是2的几次方?

	
1用2进制表示(0001): 

   2^3*0 + 2^2*0 + 2^1*0 + 2^0
	
 =  0 + 0 + 0 + 1

 =  1

 2用2进制表示(0010):     

   2^3*0 + 2^2*0 + 2^1*1 + 2^0*0
	
 = 0 + 0 + 2 + 0

 = 2

 3用2进制表示(0011):   

   2^3*0 + 2^2*0 + 2^1*1 + 2^0*1
	
 = 0 + 0 + 2 + 1

 = 3

4用2进制表示(0100): 

	2^3*0 + 2^2*1 + 2^1*0 + 2^0*0
	
 = 0 + 4 + 0 + 0

 = 4

5用2进制表示(0101): 

   2^3*0 + 2^2*1 + 2^1*0 + 2^0*1
	
 = 0 + 4 + 0 + 1

 = 5

 ......

 127用2进制表示(0111 1111)

 0*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 + 1*2^0

 = 0 + 64 + 32 + 16 + 8 + 4 + 2 + 1

 = 127


在定义变量时可以使用2进制表示方式:int i = 0b0000_1111;

8进制:

 8进制当中1的含义:
		
  0   0    0    0    1   => 1    8^0  (8的0次方)   

  0   0    0    1    0   => 8    8^1  (8的1次方)      

  0   0    1    0    0   => 64   8^2  (8的2次方)     

  0   1    0    0    0   => 512  8^3  (8的3次方)    

  1   0    0    0    0   => 4096 8^4  (8的4次方)    

 ........

	10000 0000 这是8的几次方?


	用8进制表示1-9
  
	 1:   0000 0001
	 2:   0000 0002
	 3:   0000 0003
	 4:   0000 0004
	 5:   0000 0005
	 6:   0000 0006
	 7:   0000 0007
	 8:   0000 0010
	 9:   0000 0011


	用8进制表示100

	 100:0000 0144

	用8进制表示200

   200:0310


	用8进制表示600

	600: 01130  


	在定义变量时可以使用8进制表示方式:int i = 01111;

16进制:

 16进制当中1的含义:
		
  0   0    0    0    1   => 1       16^0  (16的0次方)   

  0   0    0    1    0   => 16      16^1  (16的1次方)      

  0   0    1    0    0   => 256     16^2  (16的2次方)     

  0   1    0    0    0   => 4096    16^3  (16的3次方)    

  1   0    0    0    0   => 65536   16^4  (16的4次方)    

 ........

 10000 0000 这是16的几次方?    

  

  用16进制表示1-17

	     1:  0000 0001
	     2:  0000 0002
	     3:  0000 0003
		  4:  0000 0004
	     5:  0000 0005
	     6:  0000 0006
		  7:  0000 0007
	     8:  0000 0008
	     9:  0000 0009
		 10:  0000 000a
	    11:  0000 000b
	    12:  0000 000c
		 13:  0000 000d
	    14:  0000 000e
	    15:  0000 000f
		 16:  0000 0010
	    17:  0000 0011
	    18:  0000 0012

	用16进制表示301
   
	     301: 012d
	  
	用16进制表示5000

	     5000:0000 1388

	用16进制表示65535

	    65535: 0ffff


	在定义变量时可以使用16进制表示方式:int i = 0x1111;

有符号类型(+,-)

首位为符号位,首位为0表示正数。首位为1表示负数。

无符号类型

所有的数都是正数,不包含负数。

char的最大值是多少?(char是无符号类型)

1111 1111 1111 1111 = 65535

负数的2进制转10制:

公式: 求补码(1.求反码 2.反码+1)

1000 0000 = -128
100 0000 = -64

1111 1111 = -1

byte: [-128,127]

0111 1111 最大值

10000 0000 最小值

short: 0000 0000 0000 0000 ?

int : 0000 0000 0000 0000 0000 0000 0000 0000 ?

位运算符:

与(&) 只有两个数位同时为1时,结果才是1

byte: 1 & 2

0000 0001
0000 0010
0000 0000

byte: 2 & 3

0000 0010
0000 0011
0000 0010

或(|) 只要有一个个数位是1,结果就是1
byte: 1 | 2

0000 0001
0000 0010
0000 0011

byte: 2 | 3

0000 0010
0000 0011
0000 0011

非(~) 1变0,0变1

~1
~0000 0001
1111 1110 = -2
~2
~0000 0010
1111 1101 = -3
~3

~-1
~1111 1111
00000000 = 0

异或(^) 两个数一模一样结果是0,不一样结果是1

1 ^ 2 = 3

0000 0001
0000 0010
0000 0011

左移(<<),右移(>>),无符号右移(>>>)

左移: 1 << 1 = 0

0000 0001

以最快的速度计算2 * 8 = ? -> 2 <<< 3

结论: 左移1次相当于乘于2

右移:1 >> 1 = 2 (原来的数是正值,在左边补0。原来的数是负值,在左边补1。)

结论: 右移1次相当于除于2

-4 >>> 1 = -2

无符号右移:(无符号右移永远在左边补0)

8 >>> 1 = 4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值