Saya telah melihat operator tilde yang digunakan dalam algoritma hashing ELF, dan saya penasaran apa fungsinya. (Kode ini dari Eternally Confused .)
unsigned elf_hash ( void *key, int len )
{
unsigned char *p = key;
unsigned h = 0, g;
int i;
for ( i = 0; i < len; i++ ) {
h = ( h << 4 ) + p[i];
g = h & 0xf0000000L;
if ( g != 0 )
h ^= g >> 24;
h &= ~g;
}
return h;
}
~
juga disebut "komplemen satu", yang merupakan salah satu bentuk negasi biner. Hampir semua komputer modern menggunakan aritmatika komplemen dua, yang merupakan kebalikan bitwise, ditambah satu. Jadi untuk variabel integer bertandax
, Anda biasanya akan menemukan yang~x + 1
memberikan nilai yang sama dengan-x
. Misalnya,printf("%hx %hx\n", -1234, ~1234 + 1)
mencetakfb2e fb2e
di mesin saya.~
adalah operator bitwise NOT. Ini membalikkan bit operan.Misalnya, jika Anda memiliki:
sumber
Ini adalah operator NOT bitwise. Ini membalik semua bit dalam angka: 100110 -> 000011
sumber
Karakter tilde digunakan sebagai operator untuk membalikkan semua bit integer (bitwise NOT).
Sebagai contoh:
~0x0044 = 0xFFBB
.sumber
Ini adalah operator NOT bitwise. Ini membalikkan semua bit dalam nilai integer.
sumber
Operator Tilde (~) juga disebut operator bitwise NOT, melakukan pelengkap seseorang atas bilangan biner sebagai argumen. Jika operan ke NOT adalah bilangan desimal maka ia mengubahnya sebagai biner dan melakukan operasi komplemen satu.
Untuk menghitung komplemen seseorang, cukup balikkan semua digit [0 -> 1] dan [1 -> 0] Ex: 0101 = 5; ~ (0101) = 1010. Penggunaan operator tilde: 1. Digunakan dalam operasi masking, Masking berarti mengatur dan mereset nilai di dalam register manapun. misalnya:
Ini akan mengatur mask ke nilai biner 10000 dan mask ini dapat digunakan untuk memeriksa nilai bit yang ada di dalam variabel lain.
Ini disebut Masking bit. 2. Untuk menemukan padanan biner dari bilangan apa pun menggunakan properti masking
Output: Desimal 10 sama dengan 00001010
Pengamatan saya : Untuk rentang maksimum dari semua tipe data, pelengkap satu memberikan nilai negatif yang diturunkan 1 ke nilai yang sesuai. mis .:
~ 1 --------> -2
~ 2 ---------> -3
dan seterusnya ... Saya akan tunjukkan observasi ini menggunakan potongan kode kecil
Catatan: Ini hanya berlaku untuk rentang tipe data. artinya untuk tipe data int aturan ini hanya akan berlaku untuk nilai range [-2,147,483,648 hingga 2,147,483,647].
Terima kasih ..... Semoga ini membantu Anda
sumber