進数変換

使い方

2進数、8進数、10進数、16進数を相互変換するツールです。

(1)変換したい値を入力します。

(2)変換ボタンのクリックで値を変換します。

2進数:Binary number(バイナリ)

「0」と「1」の2種類の数字の組み合わせによって数値を表現する形式のことで、0,1と順に増え、次に位が増えて10になります。

8進数:Octal number(オクタル)

「0」から「7」までの8種類の数字を使って数値を表現する形式のことで、0,1,2,3,4,5,6,7と順に増え、次に位が増えて10になります。

10進数:Decimal number(デシマル)

「0」から「9」までの10種類の数字を使って数値を表現する形式のことで、0,1,2,3,4,5,6,7,8,9と順に増え、次に位が増えて10になります。普段一般的に利用している表現方法です。

16進数:Hexadecimal number(ヘキサデシマル)

「0」から「9」までの数字と「A」から「F」までのアルファベットを使って表現する形式のことで、0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fと順に増え、次に位が増えて10になります。

10進数 01234567891011121314151617
2進数 011011100101110111100010011010101111001101111011111000010001
8進数 0123456710111213141516172021
16進数 0123456789ABCDEF1011
10進数 012345678
91011121314151617
2進数 0110111001011101111000
10011010101111001101111011111000010001
8進数 0123456710
111213141516172021
16進数 012345678
9ABCDEF1011

サンプルコード

<?php

/**
 * 10進数→2進数
 * 引数:対象
 * 戻値:結果
 */
function _chgDecToBin($p_sValue) {
	if (($p_sValue === '0') || ($p_sValue === '-0')) {
		return '0';
	}
	$arrNumber = array('0' => '0', '1' => '1');
	$sNumber   = '2';//2進数
	$sConvert  = '';
	while ($p_sValue !== '0') {
		$sConvert = $arrNumber[bcmod($p_sValue, $sNumber)].$sConvert;
		$p_sValue = bcdiv($p_sValue, $sNumber, 0);
		if ($p_sValue === null) {
			break;
		}
	}
	return $sConvert;
}
var_dump(_chgDecToBin('10'));

※結果
string(4) "1010"
?>
							
<?php

/**
 * 2進数→10進数
 * 引数:対象
 * 戻値:結果
 */
function _chgBinToDec($p_sValue) {
	if (($p_sValue === '0') || ($p_sValue === '-0')) {
		return '0';
	}
	$arrNumber = array('0' => '0', '1' => '1');
	$sNumber   = '2';//2進数
	$sConvert  = '0';
	$p_sValue  = strrev($p_sValue);
	$nLen      = strlen($p_sValue);
	for($nIdx = 0; $nIdx < $nLen; $nIdx++) {
		$sBcpow   = bcpow($sNumber, $nIdx, 0);
		$sBcmul   = bcmul($sBcpow, $arrNumber[$p_sValue{$nIdx}]);
		$sConvert = bcadd($sBcmul, $sConvert);
	}
	return $sConvert;
}
var_dump(_chgBinToDec('1010'));

※結果
string(2) "10"
?>
							
<?php

/**
 * 2進数 → 8進数
 * 引数:対象
 * 戻値:結果
 */
function _chgBinToOct($p_sValue) {
	$arrNumber = array('000' => '0', '001' => '1', '010' => '2', '011' => '3', '100' => '4', '101' => '5', '110' => '6', '111' => '7');
	$nBit      = 3;//3bit
	$sConvert  = '';
	$nLen      = strlen($p_sValue);
	$nLoop     = ceil($nLen / $nBit);
	$p_sValue  = str_pad($p_sValue, $nLoop * $nBit, '0', STR_PAD_LEFT);
	for($nIdx=0; $nIdx<$nLoop; $nIdx++) {
		$sSubstr   = substr($p_sValue, $nIdx * $nBit, $nBit);
		$sConvert .= $arrNumber[$sSubstr];
	}
	return $sConvert;
}
var_dump(_chgBinToOct('1010'));

※結果
string(2) "12"
?>
							
<?php

/**
 * 8進数 → 2進数
 * 引数:対象
 * 戻値:結果
 */
function _chgOctToBin($p_sValue) {
	$arrNumber = array('0' => '000', '1' => '001', '2' => '010', '3' => '011', '4' => '100', '5' => '101', '6' => '110', '7' => '111');
	$sConvert  = '';
	$nLen      = strlen($p_sValue);
	for($nIdx=0; $nIdx<$nLen; $nIdx++) {
		$sSubstr   = substr($p_sValue, $nIdx, 1);
		$sConvert .= $arrNumber[$sSubstr];
	}
	return $sConvert;
}
var_dump(_chgOctToBin('12'));

※結果
string(6) "001010"
?>
							
<?php

/**
 * 2進数 → 16進数
 * 引数:対象
 * 戻値:結果
 */
function _chgBinToHex($p_sValue) {
	$arrNumber = array('0000' => '0', '0001' => '1', '0010' => '2', '0011' => '3', '0100' => '4', '0101' => '5', '0110' => '6', '0111' => '7', 
					'1000' => '8', '1001' => '9', '1010' => 'A', '1011' => 'B', '1100' => 'C', '1101' => 'D', '1110' => 'E', '1111' => 'F');
	$nBit      = 4;//4bit
	$sConvert  = '';
	$nLen      = strlen($p_sValue);
	$nLoop     = ceil($nLen / $nBit);
	$p_sValue  = str_pad($p_sValue, $nLoop * $nBit, '0', STR_PAD_LEFT);
	for($nIdx=0; $nIdx<$nLoop; $nIdx++) {
		$sSubstr   = substr($p_sValue, $nIdx * $nBit, $nBit);
		$sConvert .= $arrNumber[$sSubstr];
	}
	return $sConvert;
}
var_dump(_chgBinToHex('1010'));

※結果
string(1) "A"
?>
							
<?php

/**
 * 16進数 → 2進数
 * 引数:対象
 * 戻値:結果
 */
function _chgHexToBin($p_sValue) {
	$arrNumber = array('0' => '0000', '1' => '0001', '2' => '0010', '3' => '0011', '4' => '0100', '5' => '0101', '6' => '0110', '7' => '0111', 
						'8' => '1000', '9' => '1001', 'A' => '1010', 'B' => '1011', 'C' => '1100', 'D' => '1101', 'E' => '1110', 'F' => '1111');
	$sConvert  = '';
	$nLen      = strlen($p_sValue);
	for($nIdx=0; $nIdx<$nLen; $nIdx++) {
		$sSubstr   = substr($p_sValue, $nIdx, 1);
		$sConvert .= $arrNumber[$sSubstr];
	}
	return $sConvert;
}
var_dump(_chgHexToBin('A'));

※結果
string(4) "1010"
?>
							
<?php

/**
 * 2の補数
 * 引数:対象
 * 戻値:結果
 */
function _chgTwosComplement($p_sValue) {
	$sReverse = '';
	$nLen     = strlen($p_sValue);
	for ($nIdx=0; $nIdx<$nLen; $nIdx++) {
		if ($p_sValue[$nIdx] === '0') {
			$sReverse = $sReverse.'1';
		} else {
			$sReverse = $sReverse.'0';
		}
	}
	$sConvert = '';
	$sReverse = strrev($sReverse);
	$nLen     = strlen($sReverse);
	$sAdd     = '1';
	for ($nIdx=0; $nIdx<$nLen; $nIdx++) {
		if (($sReverse[$nIdx] === '0') && ($sAdd === '1')) {
			$sAdd     = '';
			$sConvert = '1'.$sConvert;
		} else if (($sReverse[$nIdx] === '1') && ($sAdd === '1')) {
			$sAdd     = '1';
			$sConvert = '0'.$sConvert;
		} else {
			$sConvert = $sReverse[$nIdx].$sConvert;
		}
	}
	return $sConvert;
}
var_dump(_chgTwosComplement('1010'));

※結果
string(4) "0110"
?>
							

最近の投稿