From 75044da89940e420da5a0ac4e06b3cb4d41e660c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20MARQUET?= Date: Wed, 14 Feb 2024 12:14:43 +0100 Subject: [PATCH] Tp nombres entiers --- TP nombre entier/main.py | 65 ++++++++++++++++++++++++++ TP nombre entier/tp_nombres_entiers.py | 55 ++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 TP nombre entier/main.py create mode 100644 TP nombre entier/tp_nombres_entiers.py diff --git a/TP nombre entier/main.py b/TP nombre entier/main.py new file mode 100644 index 0000000..edbf870 --- /dev/null +++ b/TP nombre entier/main.py @@ -0,0 +1,65 @@ +from sys import argv as args +from tp_nombres_entiers import * + +def is_equal(a, b): + return a == b + +def __main__(): + if len(args) == 2: + if args[1] == "tp_nombres_entiers": + print("=======================binary_to_int=======================") + print(binary_to_int('11')) + print(binary_to_int('101010')) + print("=======================get_nb_bits=======================") + print(get_nb_bits(3)) + print(get_nb_bits(32)) + print("=======================int_to_bits=======================") + print(int_to_bits(3)) + print(int_to_bits(32)) + print("=======================initialisation en binaire=======================") + i = 42 + j = 0b101010 + print(i) + print(j) + print(is_equal(i, j)) + print("=======================masque=======================") + i = 183 + mask = 0b10010001 + j = i & mask + print(j) + print("=======================positive_or_negative_4_bytes_int_to_bits=======================") + print(positive_or_negative_4_bytes_int_to_bits(0)) + print(positive_or_negative_4_bytes_int_to_bits(1)) + print(positive_or_negative_4_bytes_int_to_bits(2)) + print(positive_or_negative_4_bytes_int_to_bits(3)) + print(positive_or_negative_4_bytes_int_to_bits(4)) + print(positive_or_negative_4_bytes_int_to_bits(5)) + print(positive_or_negative_4_bytes_int_to_bits(6)) + print(positive_or_negative_4_bytes_int_to_bits(7)) + print(positive_or_negative_4_bytes_int_to_bits(-1)) + print(positive_or_negative_4_bytes_int_to_bits(-2)) + print(positive_or_negative_4_bytes_int_to_bits(-3)) + print(positive_or_negative_4_bytes_int_to_bits(-4)) + print(positive_or_negative_4_bytes_int_to_bits(-5)) + print(positive_or_negative_4_bytes_int_to_bits(-6)) + print(positive_or_negative_4_bytes_int_to_bits(-7)) + print(positive_or_negative_4_bytes_int_to_bits(-8)) + print("=======================get_bits=======================") + print(get_bits('10110', 1)) + print(get_bits('10110', 2)) + print(get_bits('10110', 3)) + print(get_bits('10110', 4)) + print(get_bits('10110', 5)) + print(get_bits('10110', 6)) + print("=======================add=======================") + print(add('010101', '100111')) + print(add('1', '1')) + else: + print("Usage: python main.py ") + return + else: + print("Usage: python main.py ") + return + +if __name__ == "__main__": + __main__() \ No newline at end of file diff --git a/TP nombre entier/tp_nombres_entiers.py b/TP nombre entier/tp_nombres_entiers.py new file mode 100644 index 0000000..e3c0077 --- /dev/null +++ b/TP nombre entier/tp_nombres_entiers.py @@ -0,0 +1,55 @@ +def binary_to_int(b): + n = 0 + for i in range(len(b)): + n = n * 2 + int(b[i]) + return n + + +def get_nb_bits(i): + n = 0 + while 2 ** n <= i: + n += 1 + return n + + +def int_to_bits(i): + b = "" + while i > 0: + b = str(i % 2) + b + i = i // 2 + return b + + +def positive_or_negative_4_bytes_int_to_bits(i): + if i < 0: + i = 2 ** 32 + i + b = "" + while i > 0: + b = str(i % 2) + b + i = i // 2 + b = "0" * (4 - len(b)) + b + return b + + +def get_bits(b, i): + if i <= len(b): + return int(b[len(b) - i]) + else: + return 0 + + +def add(b1, b2): + n = max(len(b1), len(b2)) + b1 = "0" * (n - len(b1)) + b1 + b2 = "0" * (n - len(b2)) + b2 + retenue = 0 + somme = "" + for i in range(n - 1, -1, -1): + s = int(b1[i]) + int(b2[i]) + retenue + somme = str(s % 2) + somme + retenue = s // 2 + if retenue > 0: + somme = "1" + somme + return somme + +