Dersler

View on GitHub

EEM-120 Algoritma ve Programlama II Dersi

2022-2023 Bahar Dönemi Konu 4

Bit Düzey (Bitwise) Operatörler

#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