8 / 37 · Konsep
Komplemen dua, perluasan tanda, dan overflow
Bedakan interpretasi signed dari syarat overflow penjumlahan melalui persamaan dan contoh penyangkal.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Bobot bit paling signifikan berubah
Bilangan bulat komplemen duaKomplemen dua Representasi bilangan bulat bertanda dengan pola bit berlebar tetap. Rentang n bit adalah −2^(n−1) hingga 2^(n−1)−1. selebar bit ditafsirkan sebagai:
1010 empat bit bernilai 10 sebagai unsignedUnsigned Interpretasi pola bit sebagai bilangan bulat nonnegatif. Rentang n bit adalah 0 hingga 2^n−1 dan dapat berbeda dari interpretasi signed pola yang sama. Selengkapnya dan -6 sebagai signed. Caranya bukan memisahkan bit tanda lalu membaca sisanya sebagai nilai mutlak. Pada lebar tetap, diperoleh dengan membalikNegasi Operasi NOT menukar 0 dan 1. Garis di atas ekspresi menerapkan NOT pada seluruh ekspresi yang dicakupnya. Selengkapnya bit lalu menambah 1; tetapi +8, lawan dari minimum -8, tidak berada dalam rentang signed empat bit.
Perluasan harus mempertahankan nilai
Perluasan unsigned menambahkan 0 di depan; perluasan signed mengulang bit tanda. 1010 menjadi +10 jika diperluas ke 00001010, tetapi tetap -6 jika menjadi 11111010. Memperlebar pola yang sama membutuhkan rangkaian berbeda menurut interpretasinya.
logic signed [3:0] a, b;
logic signed [4:0] exact;
logic [3:0] result;
logic overflow;
assign exact = {a[3], a} + {b[3], b};
assign result = exact[3:0];
assign overflow = (a[3] == b[3]) && (result[3] != a[3]);Contoh ini menjumlahkan dua operand signed tanpa carry masuk. exact mempertahankan jumlah lima bit, lalu memeriksa tanda hasil yang dipersempit.
Nilai awal 11111010 adalah pola yang sama untuk unsigned 250 dan signed −6. Mengubah b7 membuat kedua interpretasi bergerak ke arah berlawanan.
11111010 → unsigned 250 · signed -6 · hex 0xFA
Carry berbeda dari overflow signed
Jika dua nilai bertanda sama menghasilkan tanda berbeda, terjadi overflow. Pada empat bit, tersimpan sebagai 1010 atau -6, sedangkan sebagai 0111 atau +7. Penjumlahan dua bilangan bertanda berbeda tidak menimbulkan pelampauan ini.
Campuran signed dan unsigned dalam RTL membingungkan aturan perbandingan serta perluasan. Nyatakan lebar dan signedness kedua operand, lalu uji minimum, -1, 0, dan maksimum.
Coba sendiri
Untuk signed empat bit, tentukan pola tersimpan dan overflow dari serta . Jelaskan juga hasil negasi .
Baca penjelasan
adalah 1001 tanpa overflow. 10 di luar rentang dan tersimpan sebagai 1010 (-6), sehingga overflow. Membalik -8 lalu menambah 1 kembali menghasilkan 1000 karena +8 tidak dapat direpresentasikan; jangan menggunakannya sebagai perhitungan nilai mutlak yang benar.