Выделение цифры из числа в двоичном виде и ее замена (c-sharp)
по условию задачи необходимо ввести число в бинарном представлении, затем третий бит заменить на 1, т.е. ввел, например, 110111 — получил 111111, ввел 111111 — программа выдала число без изменений и т.п. Только начал изучать шарп (мой первый язык), поэтому нужно решить задачу самым простым способом (в интернете нашел только сложные решения с использованием массивов и прочих вещей, которые я еще не изучил) Третий бит найти и изменить на 1 я смог, но как теперь его вернуть в само число? Вот код моей программы:
using System; using System.Windows.Forms; using Microsoft.VisualBasic; class Prog < static void Main() < string A = Interaction.InputBox("Введите число в двоичном представлении", "Ввод числа"); int num1 = Convert.ToInt32(A, 2); string B = Convert.ToString(num1, 2); string C = (" " + B[2]); int num2 = Int32.Parse(C); int num3 = (num2 == 0 ? ++num2 : num2); MessageBox.Show(" " + num3); >>
Заранее спасибо за помощь!
Отслеживать
Константин
задан 21 авг 2019 в 21:57
Константин Константин
13 3 3 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
затем третий бит заменить на 1, т.е. ввел, например, 110111 — получил 111111
А вы уверены, что отсчет битов ведется слева? Обычно считают справа, как разряды в обычных десятичных числах.
То, как вы сделали, через строковое представление числа — лютейший костыль. Биты в числе устанавливаются/снимаются с помощью побитовых операторов | , & и ^ .
Для вашего случая (установить третий бит в числе в единицу):
// получаете число любым способом int number = 123; // сокращенная форма number |= (1
Число в двоичной системе счисления с лидирующими нулями
Главное, чтобы было 1 байт — 8 цифр. Например, функция bin переводит 1 в 0b1 , а требуется получить 0000 0001 .
Отслеживать
9,396 4 4 золотых знака 41 41 серебряный знак 57 57 бронзовых знаков
задан 29 окт 2015 в 9:49
Николай Михальцов Николай Михальцов
15 1 1 серебряный знак 5 5 бронзовых знаков
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
"".format(n) например можно так.
Отслеживать
ответ дан 29 окт 2015 в 9:57
Владимир Мартьянов Владимир Мартьянов
9,669 4 4 золотых знака 21 21 серебряный знак 36 36 бронзовых знаков
get_bin = lambda x, n: x >= 0 and str(bin(x))[2:].zfill(n) or "-" + str(bin(x))[3:].zfill(n)
29 окт 2015 в 10:00
@НиколайМихальцов Это для меня слишком, я не настоящий питонист 🙂
29 окт 2015 в 10:01
29 окт 2015 в 10:03
@НиколайМихальцов: первый нолик можно не использовать, если вам не надо поддерживать Python 2.6 (или старше). Ещё bin(n)[2:].zfill(8) , (предложенный @ BOPOH) который работает для неотрицательных чисел, может быть слегка быстрее чем ''.format(n) . Хотя .format() мне кажется более читаемым здесь.
30 окт 2015 в 23:25
Для неотрицательных целых чисел n :
bin(n)[2:].zfill(8)
Ответ из комментария @BOPOH.
Отслеживать
Начиная с Python 3.6 можно воспользоваться F-строками и возможностью использования знака подчёркивания _ в качестве разделителя цифр числа:
где x — это выражение, результат которого нужно вывести в двоичном представлении,
: отделяет это выражение от описания форматирования (язык то же, что и в методе .format() ),
0 задаёт символ заполнения,
9 — это минимальное количество символов строке (8 на байт, один символ для разделителя),
_ добавляет разделитель между каждыми четырьмя символами (наподобие разделителей тысяч в записи числа),
b указывает, что вывод должен производиться в двоичной системе счисления.
Например, при x = 1 вывод будет почти таким, какой вам и требовался:
print(f'') # 0000_0001
Если подчёркивание в качестве разделителя не подходит, то можно легко заменить его на пробелы:
print(f''.replace('_', ' ')) # 0000 0001
Важно отметить, что при отрицательных значениях x этот код заберёт одну позицию на знак:
print(f'') # -000_0001
Если всё же требуется обрабатывать и отрицательные числа, код можно дополнить одним условием:
x = -1 print(f' 0 else 10>_b>') # -0000_0001
Также важно, что числа, не помещающиеся в выделенное пространство, не будут дополняться нулями слева, но разделение по 4 символа сохранится:
print(f'') # 1_1111_0100_0000
Здесь играет роль то, что число 9 в форматирующем выражении описывает именно минимальную ширину строки, и никак не ограничивает её сверху.
Как задать число в двоичном виде на C
Нужна программа для сверки таблицы истинности В конце это все должно быть выведено через плату и я не понимаю как это надо сделать Как задать число в двоичной форме?
Отслеживать
задан 20 фев 2021 в 7:46
1 1 1 бронзовый знак
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
В Си пока нет бинарной записи чисел. Пока можно попробовать макросами такое задавать. А если константные числа не нужны, тогда функцией можно обойтись.
// 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)) # includeunsigned int bin32(char const * s) < unsigned int r = 0 ; while ( * s ) < r return r ; > int main()
10101010 = 170 10101010 = 170
Отслеживать
ответ дан 20 фев 2021 в 8:21
17.2k 1 1 золотой знак 9 9 серебряных знаков 33 33 бронзовых знака
Если компилятор у вас относительно новый, поддерживающий 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 в режиме "Программист":
Двоичная арифметика: сложение, умножение, вычитание, деление бинарных чисел
Учимся складывать, вычитать, умножать и делить двоичные числа — работаем с фундаментальными законами современной цифровой электроники.
Иллюстрация: Катя Павловская для Skillbox Media
Дмитрий Зверев
Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.
Мы привыкли считать всё в десятичной системе, потому что у нас 10 пальцев — и это удобно. Но если бы у нас было больше пальцев, например 12, то система могла бы быть двенадцатиричной и мы бы воспринимали её как обычную.
Когда дело доходит до двоичной системы счисления, сложно вот так сразу переключиться на её арифметику — хотя, казалось бы, принципы такие же, как для десятичной. Ведь там есть все привычные операции: сложение, вычитание, умножение, деление. Единственное отличие: в двоичных числах используются всего две цифры — ноль и единица.
Давайте избавимся от страха и наконец узнаем, как проводить знакомые нам математические операции в двоичной системе.
Сложение двоичных чисел
Правила сложения двоичных чисел похожи на привычные нам: сложение происходит поразрядно справа налево, при этом важно помнить о переносе чисел в новый разряд.
В десятичной системе у нас всего 10 цифр: от 0 до 9. Когда мы складываем 1 и 9, у нас получается переполнение, так как больше 9 в одном разряде нельзя записать. Поэтому мы переносим единицу в следующий, получаем 10.
Двоичная система работает аналогично: чтобы понять, как складывать числа, нужно помнить об этом переполнении. Всего в двоичной системе две цифры — 0 и 1. Если сложить 1 и 1, мы получим переполнение, а значит, единица пойдёт в следующий разряд, результатом станет 10 (только не «десять», а «один-ноль»).
Если представить правила сложения двоичных чисел в общем виде, получим такую таблицу:
Но лучше разобраться на примерах.
Пример 1. Давайте сложим 1100 и 101.
Рассмотрим пример подробнее. Как мы уже упоминали ранее, сложение происходит справа налево. Разряды считаются тоже справа налево:
- Первый: 0 + 1 = 1.
- Второй: 0 + 0 = 0.
- Третий: 1 + 1 = 10 — переполнение, единица переходит в следующий разряд.
- Четвёртый: 1 + 0 + 1 = 10 — добавляем единицу из прошлого разряда, получаем переполнение, единица переходит в следующий разряд.
- Пятый: 0 + 0 + 1 = 1 — единица пришла из предыдущего разряда.
Пример 2. Сложим 1111 и 111.
- Первый: 1 + 1 = 0 — единица переходит в следующий разряд.
- Второй: 1 + 1 + 1 = 1 — единица переходит в следующий разряд.
- Третий: 1 + 1 + 1 = 1 — единица переходит в следующий разряд.
- Четвёртый: 1 + 0 + 1 = 0 — единица переходит в следующий разряд.
- Пятый: 0 + 0 + 1 = 1.
Вроде бы пока несложно. Так что попробуйте сами сложить 1101 и 1011, чтобы закрепить знания.
1101 + 1011 = 11000.
Умножение двоичных чисел
Умножение в двоичной системе, как в десятичной, основано на сложении — и умении считать в столбик.
Сведём в таблицу правила умножения двоичных чисел:
Давайте теперь посмотрим на реальных примерах, как правильно умножать двоичные числа.
Пример 1. Умножим 110 на 10.
Здесь мы воспользуемся привычным школьным «столбиком»: сначала умножаем верхнее число, 110, на 0, затем на 1, а потом складываем полученные два и получаем результат.
По сути, если мы умножаем число на ноль, то оно превращается в ноль, а если на единицу — остаётся неизменным, но сдвигается на число разрядов, равное номеру разряда этой единицы, как в обычном умножении:
- 110 × 0 = 000;
- 110 × 1 = 110.
Сдвигаем 110 на один разряд влево и складываем результаты промежуточных умножений:
- 000 + 1100 = 1100.
Мы получили 1100, потому что сместили результат умножения 110 × 1 на один разряд влево, а затем добавили один 0 справа — как в обычном умножении.
Пример 2. Давайте теперь умножим 101 на 101.
Не пугайтесь, что у нас получилось три числа, которые нужно сложить: правила остаются теми же. Ещё можно приписывать дополнительные нули туда, где находится пустое пространство — это поможет не запутаться.
- 101 × 1 = 101;
- 101 × 0 = 000;
- 101 × 1 = 101.
Снова сдвигаем влево промежуточные результаты и складываем:
- 101 + 0000 + 10100 = 11001.
Попробуйте сами умножить 1101 на 111.
Вычитание двоичных чисел
Правила двоичного вычитания тоже ничем не отличаются от десятичного. Мы также вычитаем поразрядно и, если нужно, занимаем единицу из старшего разряда.
Таблица вычитания выглядит так:
Заметьте, что 0 − 1 = 1. Это всё потому, что мы занимаем единицу из старшего разряда и получаем 10, или 2 в десятичной системе, а если вычесть из 10 число 1, получим 1 (ведь 2 − 1 = 1).
Перейдём к примерам, чтобы понять, как вычитать одно число из другого.
Пример 1. Вычтем из 1100 число 11.
Разберём подробнее поразрядно:
- Первый: 0 − 1 = 1 — занимаем единицу из старшего разряда.
- Второй: 1 − 1 = 0 — так как отсюда заняли единицу, но у нас её не было, мы взяли её из следующего разряда и вычли единицу из этого.
- Третий: 0 − 0 = 0 — из этого разряда единица ушла в первый.
- Четвёртый: 1 − 0 = 1 — здесь всё нормально.
Всё то же знакомое нам вычитание.
Пример 2. Вычтем из 1011 число 101.
Тот же алгоритм по разрядам:
- Первый: 1 − 1 = 0.
- Второй: 1 − 0 = 1.
- Третий: 0 − 1 = 1 — заняли единицу из следующего разряда.
- Четвёртый: 0 − 0 = 0 — отдали единицу в предыдущий разряд.
Кажется, что всё несложно. Попробуйте теперь сами вычесть из 11010 число 1111.
Деление двоичных чисел
Вы удивитесь, но правила деления двоичных чисел похожи на деление десятичных. Рисуем привычный «столбик», умножаем, вычитаем, получаем результат.
Таблицы тут нет, потому что она бессмысленна — давайте сразу на примерах разбирать, как делить двоичные числа.
Пример 1. Поделить 1100 на 10.
У нас есть только два варианта: умножить делитель на 1 или на 0. Поэтому алгоритм будет таким:
- Смотрим на делимое, видим, что первые две его цифры — 11. Умножаем делитель на 1 и вычитаем из 11 число 10.
- Получили 1, дописываем справа следующую по порядку цифру — 0. Теперь 10 равно делителю, значит, тоже умножаем его на 1 и вычитаем.
- Получаем 0. Но у нас ещё остался один 0 у делимого — дописываем его справа от полученного 0.
- Число 0 меньше, чем 10, поэтому умножаем делитель на 0. Получаем конечный ответ — 110.
Пример 2. Поделить 10010 на 110.
- Первые три числа делимого меньше, чем делитель — значит, умножаем делитель на 0 и вычитаем. Получаем 100.
- Дописываем 1 справа от 100, видим, что 1001 больше, чем 110, поэтому умножаем делитель на 1 и вычитаем его из 1001. Получаем 11.
- Дописываем 0 справа. Полученное 110 равно делителю, поэтому тоже умножаем его на 1, получаем конечный результат.
Попробуйте сами теперь поделить 10100 на 100.
Что запомнить
Двоичная арифметика во многом похожа на десятичную: мы так же можем складывать, вычитать, делить и умножать числа столбиком. Правда, в двоичной системе всего две цифры: 0 и 1 — поэтому привычные математические операции в ней могут показаться немного странными. К счастью, в основе двоичной арифметики лежат простые принципы, которые нужно запомнить.
Читайте также:
- Математика в жизни: где нужна и как избежать
- Запутанная задача про поп-ит
- Стыдные вопросы о логарифмах: всё, что нужно знать программисту