EEM-120 Algoritma ve Programlama II Dersi
2022-2023 Bahar Dönemi Konu 4
Bit Düzey (Bitwise) Operatörler
- saga kaydir »
- sola kaydir «
- VE &
-
VEYA - XOR ^
- DEĞİL ~
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned char a=37;
printf("a degiskeni: %d\n",a);
printf("a degiskeni 1 bit sola kaydirilirsa: %d\n", a<<1);
printf("a degiskeni 2 bit sola kaydirilirsa: %d\n", a<<2);
printf("\na degiskeni: %X\n",a);
printf("a degiskeni 1 bit sola kaydirilirsa hex: %X\n", a<<1);
printf("a degiskeni 2 bit sola kaydirilirsa hex: %X\n", a<<2);
return 0;
}
a degiskeni: 37
a degiskeni 1 bit sola kaydirilirsa: 74
a degiskeni 2 bit sola kaydirilirsa: 148
a degiskeni: 25
a degiskeni 1 bit sola kaydirilirsa hex: 4A
a degiskeni 2 bit sola kaydirilirsa hex: 94
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned char a=37;
printf("a degiskeni: %d\n",a);
printf("a degiskeni 1 bit saga kaydirilirsa: %d\n", a>>1);
printf("a degiskeni 2 bit saga kaydirilirsa: %d\n", a>>2);
printf("\na degiskeni: %X\n",a);
printf("a degiskeni 1 bit saga kaydirilirsa hex: %X\n", a>>1);
printf("a degiskeni 2 bit saga kaydirilirsa hex: %X\n", a>>2);
return 0;
}
a degiskeni: 37
a degiskeni 1 bit saga kaydirilirsa: 18
a degiskeni 2 bit saga kaydirilirsa: 9
a degiskeni: 25
a degiskeni 1 bit saga kaydirilirsa hex: 12
a degiskeni 2 bit saga kaydirilirsa hex: 9
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned char i, j, k, m, n, o;
i=21; // 0001 0101
j=56; // 0011 1000
o = ~i; // 1110 1010
k = i&j; // 0001 0000
m = i|j; // 0011 1101
n = i^j; // 0010 1101
printf("k 10 tabaninda: %d, 16 tabaninda: %X\n",k,k);
printf("m 10 tabaninda: %d, 16 tabaninda: %X\n",m,m);
printf("n 10 tabaninda: %d, 16 tabaninda: %X\n",n,n);
printf("o 10 tabaninda: %d, 16 tabaninda: %X\n",o,o);
return 0;
}
k 10 tabaninda: 16, 16 tabaninda: 10
m 10 tabaninda: 61, 16 tabaninda: 3D
n 10 tabaninda: 45, 16 tabaninda: 2D
o 10 tabaninda: 234, 16 tabaninda: EA
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned char i=0;
// i degiskeninin 4. bitini 1 yapalim
// 0001 0000 = 16
//i=16;
i=1<<4; //
printf("i'nin 4. bitinin 1 yapilmasi: %d\n", i);
i=1<<6;
printf("i'nin 6. bitinin 1 yapilmasi: %d", i);
return 0;
}
i'nin 4. bitinin 1 yapilmasi: 16
i'nin 6. bitinin 1 yapilmasi: 64
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned char i=12;
// i= 0000 1100 = 12
// i degiskeninin 4. bitini 1 yapalim
i = i|(1<<4);
printf("i'nin 4. bitinin 1 yapilmasi dec: %d\n", i);
printf("i'nin 4. bitinin 1 yapilmasi hex: %X\n", i);
return 0;
}
i'nin 4. bitinin 1 yapilmasi dec: 28
i'nin 4. bitinin 1 yapilmasi hex: 1C
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned int i=3025673753;
// i= B458 1E19
// i degiskeninin 16. bitini 1 yapalim
i = i|(1<<16);
printf("i'nin 4. bitinin 1 yapilmasi dec: %u\n", i);
printf("i'nin 4. bitinin 1 yapilmasi hex: %X\n", i);
return 0;
}
i'nin 4. bitinin 1 yapilmasi dec: 3025739289
i'nin 4. bitinin 1 yapilmasi hex: B4591E19
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned char i=12;
// i= 0000 1100 = 12
// i degiskeninin 3. bitini 0 yapalim
i = i & ~(1<<3);
printf("i'nin 3. bitinin 0 yapilmasi dec: %d\n", i);
printf("i'nin 3. bitinin 0 yapilmasi hex: %X\n", i);
return 0;
}
i'nin 3. bitinin 0 yapilmasi dec: 4
i'nin 3. bitinin 0 yapilmasi hex: 4
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned int i=3025673753;
// i= B458 1E19
// i degiskeninin 19. bitini 0 yapalim
printf("i'nin baslangic degeri hex: %X\n", i);
i = i & ~(1<<19);
printf("i'nin 19. bitinin 0 yapilmasi dec: %u\n", i);
printf("i'nin 19. bitinin 0 yapilmasi hex: %X\n", i);
return 0;
}
i'nin baslangic degeri hex: B4581E19
i'nin 19. bitinin 0 yapilmasi dec: 3025149465
i'nin 19. bitinin 0 yapilmasi hex: B4501E19
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned char i=12;
// i= 0000 1100 = 12
// i degiskeninin 3. bitini test edelim.
if(i & 1<<3)
printf("i degiskeninin 3. biti 1'dir.\n");
else
printf("i degiskeninin 3. biti 0'dir.\n");
if(i & 1<<4)
printf("i degiskeninin 4. biti 1'dir.\n");
else
printf("i degiskeninin 4. biti 0'dir.\n");
return 0;
}
i degiskeninin 3. biti 1'dir.
i degiskeninin 4. biti 0'dir.
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned char i=12, n;
// i= 0000 1100 = 12
// i degiskeninin 3. bitini test edelim.
n=2;
if(i & 1<<n)
printf("i degiskeninin %d. biti 1'dir.\n",n);
else
printf("i degiskeninin %d. biti 0'dir.\n",n);
return 0;
}
i degiskeninin 2. biti 1'dir.
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned int i=3025673753, n;
// i= 1011 0100 0101 1000 0001 1110 0001 1001 = 3025673753
// i degiskeninin 3. bitini test edelim.
n=4;
if(i & 1<<n)
printf("i degiskeninin %d. biti 1'dir.\n",n);
else
printf("i degiskeninin %d. biti 0'dir.\n",n);
n=5;
if(i & 1<<n)
printf("i degiskeninin %d. biti 1'dir.\n",n);
else
printf("i degiskeninin %d. biti 0'dir.\n",n);
return 0;
}
i degiskeninin 4. biti 1'dir.
i degiskeninin 5. biti 0'dir.
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned int i=3025673753;
int n;
// i= 1011 0100 0101 1000 0001 1110 0001 1001 = 3025673753
// i degiskeninin 3. bitini test edelim.
for(n=31;n>=0;n--)
if(i & 1<<n)
printf("1");
else
printf("0");
return 0;
}
10110100010110000001111000011001
Son derste işlenen XOR ile şifreleme orneği
#include<stdio.h>
#include<string.h>
#define N 20
void sifrele_sifre_coz(char *input_str, char *anahtar, char *output_str){
int i, j;
for(i=0, j=0;i<strlen(input_str);i++,j++){
if(j==strlen(anahtar))
j=0;
output_str[i]=input_str[i]^anahtar[j];
}
output_str[i]='\0';
}
int main() {
char metin[N]="abcdefgh";
char sifreli_metin[N];
// char sifresi_cozulmus_metin[N];
char sifre[]="s123";
sifrele_sifre_coz(metin, sifre, sifreli_metin);
printf("%s\n", sifreli_metin);
sifrele_sifre_coz(sifreli_metin, sifre, metin);
for(int i=0;metin[i]!='\0';i++)
printf("%u-",metin[i]);
printf("\n");
for(int i=0;metin[i]!='\0';i++)
printf("%u-",sifreli_metin[i]);
printf("\n");
printf("%s\n", metin);
return 0;
}
SQWWU[
97-98-99-100-101-102-103-104-
18-83-81-87-22-87-85-91-
abcdefgh