Bagaimana Anda mengonversi bilangan bulat negatif menjadi byte dengan python?

Bilangan Bulat Python

Operator Biner, Byte, dan Bitwise dengan Python
04. 40

Tandai sebagai Selesai

Bahan Pendukung

Slide Kursus Tutorial yang Direkomendasikan (. pdf) Contoh Kode (. ritsleting)

Jadilah Anggota untuk bergabung dalam percakapan

Pelengkap dua bukanlah skema yang rumit dan tidak dilayani dengan baik oleh apa pun yang panjang. Oleh karena itu, setelah pengantar ini, yang menjelaskan apa itu komplemen dua dan bagaimana menggunakannya, kebanyakan ada contoh

Pelengkap dua adalah cara setiap komputer yang saya kenal memilih untuk mewakili bilangan bulat. Untuk mendapatkan notasi negatif komplemen dua dari bilangan bulat, Anda menulis angka dalam biner. Anda kemudian membalikkan digit, dan menambahkan satu ke hasilnya

Misalkan kita bekerja dengan kuantitas 8 bit (demi kesederhanaan) dan misalkan kita ingin menemukan bagaimana -28 akan diekspresikan dalam notasi komplemen dua. Pertama kita menulis 28 dalam bentuk biner

00011100

Lalu kita balikkan angkanya. 0 menjadi 1, 1 menjadi 0

11100011
_

Lalu kita tambahkan 1

11100100

Begitulah cara seseorang menulis -28 dalam biner 8 bit

Konversi dari Komplemen Dua

Gunakan angka 0xFFFFFFFF sebagai contoh. Dalam biner, yaitu

1111 1111 1111 1111 1111 1111 1111 1111

Apa yang bisa kita katakan tentang nomor ini? . Begitulah cara segala sesuatunya saling melengkapi. 1 di depan berarti angkanya negatif, 0 di depan berarti angkanya 0 atau positif

Untuk melihat negatif dari angka ini, kami membalik tanda angka ini. Tapi bagaimana melakukannya? . 17) bahwa untuk membalikkan tanda Anda cukup membalikkan bit (0 menjadi 1, dan 1 menjadi 0) dan menambahkan satu ke angka yang dihasilkan

Pembalikan dari bilangan biner itu, tentu saja

0000 0000 0000 0000 0000 0000 0000 0000
_Kemudian kita tambahkan satu.
0000 0000 0000 0000 0000 0000 0000 0001

Jadi negatif dari 0xFFFFFFFF adalah 0x00000001, lebih dikenal dengan 1. Jadi 0xFFFFFFFF adalah -1

Konversi ke Komplemen Dua

Perhatikan bahwa ini bekerja dua arah. Jika Anda memiliki -30, dan ingin merepresentasikannya dalam komplemen 2, Anda mengambil representasi biner dari 30

0000 0000 0000 0000 0000 0000 0001 1110
_

Balikkan digitnya

1111 1111 1111 1111 1111 1111 1110 0001

Dan tambahkan satu

1111 1111 1111 1111 1111 1111 1110 0010
_

Dikonversi kembali menjadi hex, ini adalah 0xFFFFFFE2. Dan memang, misalkan Anda memiliki kode ini

#include 

int main() {
    int myInt;
    myInt = 0xFFFFFFE2;
    printf("%d\n",myInt);

    return 0;
}
_

Itu akan menghasilkan output -30. Cobalah jika Anda suka

Aritmatika dengan Komplemen Dua

Salah satu sifat bagus dari komplemen dua adalah penambahan dan pengurangan dibuat sangat sederhana. Dengan sistem seperti komplemen dua, sirkuit penjumlahan dan pengurangan dapat disatukan, sedangkan jika tidak, mereka harus diperlakukan sebagai operasi terpisah.

Pada contoh di bagian ini, saya melakukan penjumlahan dan pengurangan dalam komplemen dua, tetapi Anda akan melihat bahwa setiap kali saya melakukan operasi sebenarnya dengan bilangan biner, saya selalu menjumlahkan

Contoh 1

Misalkan kita ingin menjumlahkan dua angka 69 dan 12. Jika kita menggunakan desimal, kita melihat jumlahnya adalah 81. Tapi mari kita gunakan biner, karena itulah yang digunakan komputer

11100011
0Bawa Baris
11100011
1(69)
11100011
2(12)
11100011
3(81)

Contoh 2

Sekarang misalkan kita ingin mengurangi 12 dari 69. Sekarang, 69 - 12 = 69 + (-12). Untuk mendapatkan negatif dari 12 kita ambil representasi binernya, balikkan, dan tambahkan satu

11100011
_4

Balikkan digitnya

11100011
_5

Dan tambahkan satu

11100011
_6

Yang terakhir adalah representasi biner untuk -12. Seperti sebelumnya, kita akan menjumlahkan kedua angka tersebut

11100011
7Carry Row
11100011
1(69)
11100011
9(-12)
11100100
0(57)

Kami menghasilkan 57, yaitu 69-12

Contoh 3

Terakhir, kita kurangi 69 dari 12. Mirip dengan operasi kita pada contoh 2, 12 - 69 = 12 + (- 69). Representasi komplemen keduanya dari 69 adalah sebagai berikut. Saya menganggap Anda sudah cukup memiliki ilustrasi pembalik dan menambahkan satu

11100100
1Jadi kita tambahkan angka ini menjadi 12.
11100100
2Bawa Baris
11100100
3(12)
11100100
4(-69)
11100100
5(-57)

Ini menghasilkan 12 - 69 = -57, yang benar

Mengapa Pembalikan dan Menambahkan Satu Bekerja

Balikkan dan tambahkan satu. Balikkan dan tambahkan satu. Itu berhasil, dan Anda mungkin ingin tahu alasannya. Jika Anda tidak peduli, lewati ini, karena ini hampir tidak penting. Ini hanya ditujukan bagi mereka yang penasaran mengapa teknik yang agak aneh itu sebenarnya masuk akal secara matematis

Membalikkan dan menambahkan satu mungkin terdengar seperti hal yang bodoh untuk dilakukan, tetapi sebenarnya itu hanyalah jalan pintas matematis dari perhitungan yang agak mudah.

Pinjaman dan Pengurangan

Ingat trik lama yang kita pelajari di kelas satu tentang "meminjam satu" dari tempat sepuluh di masa depan untuk melakukan pengurangan? . Sebagai contoh, saya akan menggunakan 93702 minus 58358

11100100
6

Sekarang, lalu, apa jawaban untuk perhitungan ini? . Kita tidak dapat mengurangkan 8 dari 2, jadi kita akan meminjam angka dari tempat paling signifikan berikutnya (tempat puluhan) untuk menjadikannya 12 dikurangi 8. 12 dikurangi 8 adalah 4, dan kita catat 1 digit di atas kolom sepuluh untuk menandakan bahwa kita harus ingat untuk mengurangkan dengan satu pada iterasi berikutnya

11100100
7

Iterasi berikutnya adalah 0 dikurangi 5, dan dikurangi 1, atau 0 dikurangi 6. Sekali lagi, kita tidak dapat melakukan 0 dikurangi 6, jadi kita meminjam dari angka paling penting berikutnya sekali lagi untuk membuat 10 dikurangi 6, yaitu 4

11100100
_8

Iterasi berikutnya adalah 7 dikurangi 3, dan dikurangi 1, atau 7 dikurangi 4. Ini adalah 3. Kita tidak perlu meminjam kali ini

11100100
_9

Iterasi berikutnya adalah 3 dikurangi 8. Sekali lagi, kita harus meminjam untuk mendapatkan 13 dikurangi 8, atau 5

1111 1111 1111 1111 1111 1111 1111 1111
0

Iterasi berikutnya adalah 9 dikurangi 5, dan dikurangi 1, atau 9 dikurangi 6. Ini adalah 3. Kita tidak perlu meminjam kali ini

1111 1111 1111 1111 1111 1111 1111 1111
1

Jadi 93702 dikurangi 58358 adalah 35344

Meminjam dan Relevansinya dengan Negatif Angka

Saat Anda ingin menemukan negatif suatu angka, Anda mengambil angka tersebut, dan menguranginya dari nol. Sekarang, misalkan kita benar-benar bodoh, seperti komputer, dan alih-alih hanya menulis tanda negatif di depan angka A saat kita mengurangkan A dari 0, kita benar-benar melakukan langkah-langkah mengurangkan A dari 0

Ambil perhitungan bodoh berikut dari 0 dikurangi 3

1111 1111 1111 1111 1111 1111 1111 1111
2
1111 1111 1111 1111 1111 1111 1111 1111
3
1111 1111 1111 1111 1111 1111 1111 1111
4
1111 1111 1111 1111 1111 1111 1111 1111
5
1111 1111 1111 1111 1111 1111 1111 1111
6

Dan lain-lain, dan lain-lain. Kami akan berakhir dengan angka yang terdiri dari 7 di digit satu, 9 di setiap digit lebih penting daripada tempat 100

Sama di Biner

Kita bisa melakukan hal yang kurang lebih sama dengan biner. Dalam contoh ini saya menggunakan bilangan biner 8 bit, tetapi prinsipnya sama untuk bilangan biner 8 bit (karakter) dan bilangan biner 32 bit (ints). Saya mengambil angka 75 (dalam 8 bit biner yaitu 010010112) dan kurangi dari nol

Kadang-kadang saya berada dalam posisi di mana saya mengurangkan 1 dari nol, dan juga mengurangkan 1 pinjaman lainnya

________3______7
1111 1111 1111 1111 1111 1111 1111 1111
8
1111 1111 1111 1111 1111 1111 1111 1111
9
0000 0000 0000 0000 0000 0000 0000 0000
0
0000 0000 0000 0000 0000 0000 0000 0000
1
11100011
_4_______2
0000 0000 0000 0000 0000 0000 0000 0000
3
0000 0000 0000 0000 0000 0000 0000 0000
4
0000 0000 0000 0000 0000 0000 0000 0000
5

Jika kami mau, kami bisa melangkah lebih jauh, tetapi tidak ada gunanya. Di dalam komputer, hasil perhitungan ini akan diberikan ke variabel delapan bit, sehingga setiap bit di luar yang kedelapan akan dibuang.

Dengan fakta bahwa kita hanya akan mengabaikan digit tambahan apa pun, apa bedanya pada hasil akhir dengan mengurangkan 01001011 dari 100000000 (satu bit diikuti oleh 8 bit nol) daripada 0? . Jika kita melakukan itu, kita berakhir dengan hasil yang sama

0000 0000 0000 0000 0000 0000 0000 0000
_6

Jadi untuk menemukan angka negatif n-bit di komputer, kurangi angka dari 0 atau kurangi dari 2n. Dalam biner, kekuatan dua ini akan menjadi satu bit diikuti oleh n nol bit

Dalam kasus angka 8-bit, itu akan menjawab dengan baik jika kita mengurangi angka kita dari (1 + 11111111) daripada 100000000

0000 0000 0000 0000 0000 0000 0000 0000
_7

Dalam biner, ketika kita mengurangi angka A dari angka semua 1 bit, yang kita lakukan adalah membalikkan bit A. Jadi operasi pengurangan sama dengan membalikkan bit angka. Lalu, kita tambahkan satu

Jadi, bagi komputer, mengambil angka negatif, yaitu mengurangkan angka dari 0, sama dengan membalikkan bit dan menambahkan satu, dari situlah triknya berasal

Bagaimana Anda mengonversi bilangan bulat menjadi byte dengan Python?

Nilai int dapat diubah menjadi byte dengan menggunakan metode int. to_bytes() .

Bagaimana Anda mengonversi angka negatif dengan Python?

Dalam Python, angka positif dapat diubah menjadi angka negatif dengan bantuan metode bawaan yang disediakan di pustaka Python bernama abs (). When abs () is used, it converts negative numbers to positive. However, when -abs () is used, then a positive number can be changed to a negative number.

Bisakah byte menyimpan angka negatif?

Dalam C#, sebuah byte mewakili bilangan bulat 8-bit yang tidak bertanda tangan, dan karenanya tidak dapat menyimpan nilai negatif (nilai yang valid berkisar dari 0 . Alternatifnya adalah sbyte , yang merupakan integer 8-bit yang ditandatangani (nilai valid dari -128 hingga 127 ). Simpan jawaban ini.

Apa itu byte negatif?

Konversi nilai bilangan bulat dari 128 hingga 255 menjadi satu byte menghasilkan apa yang dilihat Java sebagai angka negatif.