Системы счисления: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 30:
 
Примером «рафинированной» непозиционной системы счисления является [[Римская система счисления|римская система]].
 
== Двоичная система счисления ==
В компьютерной технике очень часто используется двоичная система счисления. Такую систему очень легко реализовать в электронике (полупроводниковые транзисторы и микросхемы), так как для неё требуется всего два устойчивых состояния (0 и 1).
 
Двоичная система счисления может быть непозиционной и позиционной системой. В ней используется две цифры: 0 и 1. В реальном устройстве это может быть реализовано присутствием какого-либо физического явления или его отсутствием. Например: есть электрический заряд или его нет, есть напряжение или нет, есть ток или нет, есть сопротивление или нет, отражает свет или нет, намагничено или не намагничено, есть отверстие или нет и т.п.
 
Мы уже знаем, как переводить числа в различные системы счисления. Посмотрим, как это происходит с двоичной системой счисления. Переведём число из двоичной системы счисления в десятичную.
 
<math>10101010_2 = 1 \cdot 2^7 + 0 \cdot 2^6 + 1 \cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 0 \cdot 2^0 = 128 + 32 + 8 + 2 = 170</math>;
 
Вы это можете проверить на программе-калькуляторе (gcalctool в gnome, Kcalc в KDE, или калькулятор в Windows). Он умеет производить расчёты в двоичной, восьмеричной и шестнадцатиричной системах счисления. Теперь вы знаете, как он это проделывает. Если вы захотите посвятить свою жизнь программированию, то вам часто придётся работать со степенями двойки. Ниже представлена таблица:
{|class="standard"
!Степень||Значение
|-
|0||1
|-
|1||2
|-
|2||4
|-
|3||8
|-
|4||16
|-
|5||32
|-
|6||64
|-
|7||128
|-
|8||256
|-
|9||512
|-
|10||1024
|-
|11||2048
|-
|12||4096
|-
|13||8192
|-
|14||16384
|-
|15||32768
|-
|16||65536
|}
Произведём обратное преобразование. Чтобы преобразовать число в десятичном виде к двоичному, нам нужно будет делить всё время на два и смотреть на остаток от деления. Возьмём число 33.
 
* 33 : 2 = 16 остаток 1;
* 16 : 2 = 8 остаток 0;
* 8 : 2 = 4 остаток 0;
* 4 : 2 = 2 остаток 0;
* 2 : 2 = 1 остаток 0;
* 1 : 2 = 0 остаток 1;
 
Получили <math>100001_2</math>.
 
Возьмём число 55. Посмотрим, что получится.
 
* 55 : 2 = 27 остаток 1;
* 27 : 2 = 13 остаток 1;
* 13 : 2 = 6 остаток 1;
* 6 : 2 = 3 остаток 0;
* 3 : 2 = 1 остаток 1;
* 1 : 2 = 0 остаток 1.
 
Получили <math>110111_2</math>.
 
Ниже приведены ещё примеры со сложением, вычитанием, умножением и делением.
 
Сложение:
1001
1010
----
10011
Вычитание:
1110
0101
----
1001
Умножение:
1110
0101
----
1110
0000
1110
0000
-------
1000110
Деление:
1000110|101
101 -----
---- 0001110
111
101
---
101
101
---
00
 
'''Программа двоичного представления десятичного числа'''
''(Написана на [[w:Си (язык программирования)|Си]])''
 
<source lang="c">
#include <stdio.h>
#include <conio.h>
 
void dv(unsigned);
 
int main(int argc, char **argv)
{
unsigned x;
printf("Vvedite chislo > ");
scanf("%d", &x);
dv(x);
getch();
return 0;
}
 
void dv(unsigned x)
{
unsigned mask = 1, i;
mask <<= sizeof(unsigned) * 8 - 1;
for(i = 1; i <= sizeof(unsigned) * 8; i++)
{
printf("%c", x & mask ? '1' : '0');
x <<= 1;
if(!(i % 8))
printf(" ");
}
printf("\n");
}
</source>
 
== Троичная система счисления ==