1. 程式人生 > 其它 >教你用Java7的Fork/Join框架開發高併發程式

教你用Java7的Fork/Join框架開發高併發程式

二進位制

二進位制逢二進一,每位的取值只能是0或1

原碼、反碼、補碼

注:計算機裡都是以補碼的形式儲存資料的!

原碼:最高位為符號位,0代表正數,1代表負數,非符號位為該數字絕對值的二進位制(以一個位元組(8位)為例)

​ 5 -5

原碼:0000 0101 1000 0101

反碼:正數的反碼就是原碼,負數的反碼是對原碼按位取反,只是最高位(符號位不變)。

​ 5 -5

原碼:0000 0101 1000 0101

反碼:0000 0101 1111 1010

補碼:正數的補碼與原碼一致,負數的補碼是該數的反碼加一(對負數原碼取反加一)

【補充】二進位制相加:加運算:0+0=0,0+1=1,1+0=1,1+1=10。逢2進1

​ 5 -5

原碼:0000 0101 1000 0101

反碼:0000 0101 1111 1010

反碼:0000 0101 1111 1011

知道補碼求原碼

1.正數的原碼與原碼相等

2.負數:補碼減1,再取反就可以得到原碼(最高位保持不變)

補碼:1111 1011 反碼:1111 1010 原碼:1000 0101

計算機裡都是以為什麼以補碼的形式儲存資料的?

計算機CPU中有加法器,它會進行加法的計算,不存在減法器。如果要進行減法:

例: 5 - 5 ----> 5 + (-5)

進位制轉換:

1、八進位制、十六進位制與二進位制之間的轉換

八進位制逢八進一,每一位的取值範圍為0~7。若將二進位制從低位到高位每3位組成一組(2^3=8),

每組值的大小是(000)2(111)2,即07,就可以把二進位制轉為八進位制。

(100100001101)2 每三位得一組:(100,100,001,101)2 則可表示八進位制(4415)8

十六進位制逢十六進一,每一位的取值範圍為015,其中,1015分別用A、B、C、D、E、F表示。若將二進位制從低位到高位每4位組成一組(2^4=16),每組值的取值範圍是(0000)2(1111)2,即015,就可以把二進位制轉為十六進位制。

(100100001101)2 每四位得一組:(1001,0000,1101)2 則可表示八進位制(90D)16

2、十進位制轉為其它進位制

整數部分:除以基數逆序取餘數至商為0為止

小數部分:乘於基數順序取整數部分至(去掉整數後的)小數為0或達到需要的精度為止.

【十進位制數轉為二進位制數】(十進位制轉為其它進位制,相應的把2換為其它即可!)

#include<iostream>

using namespace std;
const int N = 100000+10;
int q[N];

int main()
{
	int n;
	cin>>n;
	
	int k = 0;
	while(n != 0)
	{
		q[k++] = n % 2;
		n = n / 2;
	}
	for(k--; k >= 0; k--) cout<<q[k];
	
	return 0;
}