Как задать число в двоичном виде на C

Нужна программа для сверки таблицы истинности введите сюда описание изображения

В конце это все должно быть выведено через плату и я не понимаю как это надо сделать Как задать число в двоичной форме?


Ответы (2 шт):

Автор решения: gbg

Если компилятор у вас относительно новый, поддерживающий C++14 (или GCC), то вот так:

int b = 0b101010; //это 42 в десятичной

В противном случае, наиболее распространенная практика - перевести число в шестнадцатеричную систему счисления и задать его.

int h = 0x2A;    // это тоже 42

Обратите внимание на префиксы 0b и 0x - именно они сообщают компилятору, что далее за ними следут цифры числа в двоичной или шестнадцатеричной системе счисления соответственно

Для перевода двоичного числа в шестнадцатеричную систему счисления заметим, что один разряд шестнадцатеричной системы соответствует ровно четырем разрядом двоичной системы. Таким образом, можно составить себе табличку, а которой будет 16 строк вида

0000 0
0001 1 
0010 2
0011 3

0100 4
0101 5 
0110 6
0111 7

1000 8
1001 9 
1010 A
1011 B

1100 C
1101 D 
1110 E
1111 F

далее, режете ваше число на четверки бит справа налево и записываете цифры шестнадцатеричного числа:

1100 0101  = С5

Также для перевода можно использовать калькулятор windows в режиме "Программист": введите сюда описание изображения

→ Ссылка
Автор решения: AlexGlebe

В Си пока нет бинарной записи чисел. Пока можно попробовать макросами такое задавать. А если константные числа не нужны, тогда функцией можно обойтись.

// gcc -Wall -Wextra -Wpedantic -std=c11 binnum.c -o binnum
# define  BIN2( X1 ,  X0 ) (((X1)<<1)|(X0))
# define  BIN4( X3 ,  X2  ,  X1 , X0 ) ((BIN2(X3,X2)<<2)|BIN2(X1,X0))
# define  BIN8(  X7 ,  X6  ,  X5 , X4 , X3 ,  X2  ,  X1 , X0 ) \
 ((BIN4(X7,X6,X5,X4)<<4)|BIN4(X3,X2,X1,X0))

# include <stdio.h>

unsigned int bin32(char const * s){
  unsigned int r = 0 ;
  while ( * s ) {
    r <<= 1 ;
    if  ( ( * s ) == '1'  )
      r |= 1 ;
    ++ s ; }
  return r ; }
 
int main(){
  printf("10101010 = %u\n",BIN8(1,0,1,0,1,0,1,0));
  printf("10101010 = %u\n",bin32("10101010"));
  }

$ ./binnum

10101010 = 170
10101010 = 170
→ Ссылка