Что нового

[Математика] Преобразование DEC (0-255) в BIN 8Bit

Genics

Новичок
Сообщения
39
Репутация
0
Доброго всем дня!

Возникла необходимость в преобразовании десятичных чисел от счетчика в 8-ми битовый бинарный код. Это нужно сделать на языке Техно ST ( язык для систем автоматизации). Он очень похож на AutoIt. Поэтому код AutoIt можно легко перевести в Техно ST, главное поменьше использовать сложных функций. А лучше вообще без них.

Так вот, я знаю такой способ:
Код:
Dim $Bit_1, $Bit_2, $Bit_3, $Bit_4, $Bit_5, $Bit_6, $Bit_7, $Bit_8

$DEC_Chislo = 255

;определяем состояние Bit_8
If $DEC_Chislo = 128 Then
   $Bit_8 = 1
Else
   If $DEC_Chislo > 128 Then
	  $Bit_8 = 1
	  $DEC_Chislo = $DEC_Chislo - 128
   Else
	  $Bit_8 = 0
   EndIf

   ;определяем  состояние Bit_7
   If $DEC_Chislo = 64 Then
	  $Bit_7 = 1
   Else
	  If $DEC_Chislo > 64 Then
		 $Bit_7 = 1
		 $DEC_Chislo = $DEC_Chislo - 64
	  Else
		 $Bit_7 = 0
	  EndIf

	  ;определяем  состояние Bit_6
	  If $DEC_Chislo = 32 Then
		 $Bit_6 = 1
	  Else
		 If $DEC_Chislo > 32 Then
			$Bit_6 = 1
			$DEC_Chislo = $DEC_Chislo - 32
		 Else
			$Bit_6 = 0
		 EndIf

		 ;определяем  состояние Bit_5
		 If $DEC_Chislo = 16 Then
			$Bit_5 = 1
		 Else
			If $DEC_Chislo > 16 Then
			   $Bit_5 = 1
			   $DEC_Chislo = $DEC_Chislo - 16
			Else
			   $Bit_5 = 0
			EndIf

			;определяем  состояние Bit_4
			If $DEC_Chislo = 8 Then
			   $Bit_4 = 1
			Else
			   If $DEC_Chislo > 8 Then
				  $Bit_4 = 1
				  $DEC_Chislo = $DEC_Chislo - 8
			   Else
				  $Bit_4 = 0
			   EndIf

			   ;определяем  состояние Bit_3
			   If $DEC_Chislo = 4 Then
				  $Bit_3 = 1
			   Else
				  If $DEC_Chislo > 4 Then
					 $Bit_3 = 1
					 $DEC_Chislo = $DEC_Chislo - 4
				  Else
					 $Bit_3 = 0
				  EndIf

				  ;определяем  состояние Bit_2
				  If $DEC_Chislo = 2 Then
					 $Bit_2 = 1
				  Else
					 If $DEC_Chislo > 2 Then
						$Bit_2 = 1
						$DEC_Chislo = $DEC_Chislo - 2
					 Else
						$Bit_2 = 0
					 EndIf

					 ;определяем  состояние Bit_1
					 If $DEC_Chislo = 1 Then
						$Bit_1 = 1
					 Else
						If $DEC_Chislo > 1 Then
						   $Bit_1 = 1
						   $DEC_Chislo = $DEC_Chislo - 1
						Else
						   $Bit_1 = 0
						EndIf
					 EndIf
				  EndIf
			   EndIf
			EndIf
		 EndIf
	  EndIf
   EndIf
EndIf

MsgBox(64, 'Результат', "BIT8 = "&$Bit_8 & @CRLF & "BIT7 = "&$Bit_7 & @CRLF & "BIT6 = "&$Bit_6 & @CRLF & "BIT5 = "&$Bit_5 & @CRLF & "BIT4 = "&$Bit_4 & @CRLF & "BIT3 = "&$Bit_3 & @CRLF & "BIT2 = "&$Bit_2 & @CRLF & "BIT1 = "&$Bit_1)


Но может, кто нибудь знает более изящный метод преобразования! Подскажите пожалуйста.

Условие: Вход и весь выход должны быть в виде отдельных переменных.
И желательно без функций.Если используются функции то надо раскрыть в коде весь код функции.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Можно так , совсем без функций :
Код:
Dim $aBit[8]

$DEC_Chislo = 255

$k = 128; или 2^7
For $i = 0 To 7
	$aBit[$i] = 0
	If $DEC_Chislo - $k >= 0 Then
		$aBit[$i] = 1
		$DEC_Chislo -= $k
	EndIf
	$k /= 2
Next

MsgBox(64, 'Результат', "BIT8 = " & $aBit[0] & @CRLF & "BIT7 = " & $aBit[1] & @CRLF & "BIT6 = " & $aBit[2] & @CRLF & "BIT5 = " & $aBit[3] & @CRLF & "BIT4 = " & $aBit[4] & @CRLF & "BIT3 = " & $aBit[5] & @CRLF & "BIT2 = " & $aBi
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
$DEC_Chislo = 255

For $Bit = 1 To 4 * 8 Step 1
	ConsoleWrite( 'Bit_' & $Bit & '=' & BitAnd(BitShift($DEC_Chislo, $Bit - 1), 1) & @CRLF)
Next


Неужели в вашем языке нет побитовых операций? :smile:


Добавлено:
Сообщение автоматически объединено:

Судя по всему есть: http://proscada.ru/tm60help.ru/lang/simvol_nwe_operatorw.htm
 
Автор
G

Genics

Новичок
Сообщения
39
Репутация
0
ra4o
Хороший код, почти как у меня по логике :smile:
А можно твой код как нибудь подкорректировать, чтобы можно было использовать все переменные целого типа (INT).
У тебя в коде, в конце перебора цикла получается переменная $k = 0.5


Добавлено:
Сообщение автоматически объединено:

firex
Обалденный у вас код, одна строка практически. И он прекрасно работает. Жаль что количество бит ограничивается 32-я битами. Мне может понадобится 48 бит.

Только я пока не могу понять как он работает, и как его перевести в Техно ST. Все эти смещения битов у меня вызывают смешение мозга :stars:
 
Верх