Kata kunci unsigned di C ++

88

Apakah default kata kunci unsigned ke tipe data tertentu di C ++? Saya mencoba menulis fungsi untuk kelas untuk prototipe:

unsigned Rotate(unsigned object, int count)

Tapi saya tidak mengerti apa unsignedartinya. Bukankah seharusnya seperti unsigned intatau apa?

Kristal
sumber

Jawaban:

93

Dari tautan di atas:

Beberapa jenis ini dapat dimodifikasi menggunakan kata kunci bertanda tangan, tidak bertanda tangan, pendek, dan panjang. Ketika salah satu dari pengubah tipe ini digunakan dengan sendirinya, tipe data int diasumsikan

Ini berarti Anda dapat menganggap penulis menggunakan ints.

futureelite7
sumber
Apakah C99 dan MISRA diizinkan melakukannya?
nowox
42

Jenis Integer:

short            -> signed short
signed short
unsigned short
int              -> signed int
signed int
unsigned int
signed           -> signed int
unsigned         -> unsigned int
long             -> signed long
signed long
unsigned long

Hati-hati dengan arang:

char  (is signed or unsigned depending on the implmentation)
signed char
unsigned char
Martin York
sumber
1
@Firas: Saya tahu ini ada di C. Int implisit bukan merupakan bagian dari ISO C99 atau bagian dari ISO C ++
Prasoon Saurav
4
Menggunakan 'unsigned' (dengan sendirinya) untuk mendeklarasikan tipe 'unsigned int' adalah standar di C ++. Dalam standar saat ini: 7.1.5.2 [dcl.simple.type] memiliki tabel yang mengidentifikasi setiap deklarasi tipe ke tipe sebenarnya yang digunakan. Tabel tersebut memiliki korespondensi dari deklarasi 'unsigned' menjadi 'unsigned int'.
David Rodríguez - dribeas
2
Perhatikan bahwa char memiliki perilaku yang identik baik dengan karakter yang ditandatangani atau karakter yang tidak ditandatangani, tetapi tetap menjadi tipe yang terpisah apa pun yang terjadi.
@Firas: Lihat Bagian: 3.9.1 Tipe dasar. Paragrah 2: <quote> Ada lima jenis bilangan bulat bertanda tangan standar: "char bertanda tangan", "short int", "int", "long int", dan "long long int". </quote>
Martin York
21

Apakah default kata kunci unsigned ke tipe data di C ++

Ya, bertanda tangan dan tidak bertanda tangan juga dapat digunakan sebagai penentu tipe mandiri

Tipe data integer char, short, long dan int dapat ditandatangani atau tidak, tergantung pada kisaran angka yang perlu diwakili. Jenis bertanda dapat mewakili nilai positif dan negatif, sedangkan jenis tidak bertanda hanya dapat mewakili nilai positif (dan nol).

Integer unsigned yang berisi n bit dapat memiliki nilai antara 0 dan 2 n - 1 (yaitu 2 n nilai yang berbeda).

Namun, signed dan unsigned juga dapat digunakan sebagai penentu tipe standalone, artinya sama dengan signed int dan unsigned int. Dua pernyataan berikut ini setara:

unsigned NextYear;
unsigned int NextYear;
Prasoon Saurav
sumber
3
Bukankah itu "ya"? Ini defaultnya int, jika digunakan tanpa tipe?
bersantai
Terima kasih! Bahasa Inggris bukan bahasa pertama saya dan saya bingung dengan arti dari tipe data unsigned. Tanda tangan siapa di dalamnya? Tidak pernah terpikir oleh saya bahwa itu mungkin dari tanda kata benda ...: D
user74200
Kata kunci shortdan longjuga pengubah tipe . Jika Anda menulis short s, itu sebenarnya berarti short int s, seperti unsigned uarti sebenarnya unsigned int u. (dan unsigned shortsarana unsigned short int)
Ben Voigt
8

Anda dapat membaca tentang kata kunci unsigned di Referensi C ++ .

Ada dua jenis yang berbeda dalam hal ini, bertanda tangan dan tak bertanda tangan. Default untuk bilangan bulat ditandatangani yang berarti dapat memiliki nilai negatif.

Pada sistem 32-bit, integer adalah 32 Bit yang artinya dapat berisi nilai ~ 4 miliar.

Dan ketika ditandatangani, ini berarti Anda harus membaginya, menyisakan -2 miliar hingga +2 miliar.

Namun, ketika unsigned nilainya tidak boleh mengandung angka negatif, jadi untuk bilangan bulat ini berarti 0 hingga +4 miliar.

Ada sedikit lebih banyak informasi tentang ini di Wikipedia .

Filip Ekberg
sumber
2
Saya suka bernyanyi untuk banyak hal sendiri. Karbon dan karamelisasi yang enak!
Omnifarious
1
Bagaimana kalau mengedit kesalahan ketik? ... untuk itulah tombol "edit"!
Filip Ekberg
3

Ya, itu artinya unsigned int. Dulu jika Anda tidak menentukan tipe data di C ada banyak tempat yang baru saja diasumsikanint . Ini telah dicoba, misalnya, tipe pengembalian fungsi.

Kutil ini sebagian besar telah dibasmi, tetapi Anda menghadapi sisa-sisa terakhirnya di sini. IMHO, kode harus diperbaiki unsigned intuntuk menghindari kebingungan yang Anda alami.

Beraneka ragam
sumber