>>А что такое "сдвиги"?
Число представляет собой набор
битов. Бит может принимать значение 0 или 1.
Переменная имеет определенный размер в байтах: char имеет размер в 8 бит, таким образом максимально представимое число данным примитивным типом данных это 127 ( если char знаковый).
short имеет размер в 2 байта, int имеет размер 4 байта.
Ключевое слово signed означает что 1 бит занимает знак.
Ключевое слово unsigned означает, что все биты занимает число.
Операционная система Windows являлась 32 битной, адресация от 00000000 до ffffffff
unsogned char 127 в двоичном виде это 01111111 ( 8 бит)
При сдвиге << на единицу 01111111 превратится в 11111110
При сдвиге << на два 01111111 превратится в 11111100
При сдвиге << на три 01111111 превратится в 11111000
При сдвиге << на четыре 01111111 превратится в 11110000
При сдвиге << на пять 01111111 превратится в 11100000
При сдвиге << на шесть 01111111 превратится в 11000000
При сдвиге << на семь 01111111 превратится в 10000000
При сдвиге << на восемь 01111111 превратится в 00000000
При сдвиге >> на единицу 01111111 превратится в 00111111
При сдвиге >> на два 01111111 превратится в 00011111
При сдвиге >> на три 01111111 превратится в 00001111
При сдвиге >> на четыре 01111111 превратится в 00000111
При сдвиге >> на пять 01111111 превратится в 00000011
При сдвиге >> на шесть 01111111 превратится в 00000001
При сдвиге >> на семь 01111111 превратится в 00000000
При сдвиге >> на восемь 01111111 превратится в 00000000
Примерs:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| //вывод десятичного 18707 в двоичном виде
#include <stdio.h>
void main()
{
printf("sizeof(unsigned int): %d \n", sizeof(unsigned int));
unsigned int g = 18707;
unsigned int g2;
int j;
for(j = 0;j < 32;j++)
{
g2 = g;
g2 = g2 << j;
g2 = g2 >> 31;
printf("%d", g2);
}
} |
|
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| //вывод десятичного 127 в двоичном виде
#include <stdio.h>
void main()
{
printf("sizeof(unsigned int): %d \n", sizeof(unsigned int));
unsigned char g = 127;
unsigned char g2;
int j;
for(j = 0;j < 8;j++)
{
g2 = g;
g2 = g2 << j;
g2 = g2 >> 7;
printf("%d", g2);
}
} |
|