Loading...
NedaM avatar NedaM 1 Точки

Въпрос относно задача 12 от урок 3 на Въведение в програмирането с Java

Здравейте,

Упражнявам се върху задачите след урока за Оператори и изрази:

Дадено е число n, стойност v (v = 0 или 1) и позиция p. Напишете поредица от операции, които да променят стойността на n, така че битът на позиция p да има стойност v. Пример n=35, p=5, v=0 -> n=3. Още един пример: n=35, p=2, v=1 -> n=39.

И се спъвам на следното нещо:

public class Urok3Zadacha12 {
    public static void main(String[] args) {
        int n = 35;
        int p = 5;
        int v = 0;
        int i = 1;
        int mask = i << p;

Дотук съм сменила позицията на 1 в числото i, така че да мога да проверя дали mask и n съвпадат (=1) или не. Но оттук-нататък не мога да продължа със смяната на позиция p от 1 на 0 (в случай, че е 1). Може ли някой да удари едно рамо?

Благодаря предварително! Очаквам градивна критика!

Тагове:
0
Programming Basics
icowwww avatar icowwww 2779 Точки

Здравей,

На мен би ми било по-лесно да разделя задачата на 2 - като гледаш дали стойността на v е единица или нула и съответно да set-ваш или unset-ваш бита на тази позиция.

Например:

int mask = 1 << p;

set: 

n | mask // mask има 1-ца само на позиция p, тоест при това сравнение при позиция различна от p ще върне 1ца ако в n е единица, а при позиция = p ще върне 1 ца със сигурност 1-ца

unset:

n & ~mask //~mask има 0-ла само на позицията p, тоест при сравнението при позиция различна от p ще върне 1ца ако в n e единица, а при позиция = p ще върне нула във всички случаи 

Цялото:

       int n = 35;
       int p = 5;
       int v = 0;
       int result;
       int mask = 1 << p;

       if(v == 0)
       {
           result =  n & ~mask;   //~mask има 0-ла само на позицията p, тоест при сравнението при позиция различна от p ще върне 1ца ако в n e единица, а при позиция = p ще върне нула във всички случаи 
       }
       else
       {
           result = n | mask;  // mask има 1-ца само на позиция p, тоест при това сравнение при позиция различна от p ще върне 1ца ако в n е единица, а при позиция = p ще върне 1 ца със сигурност 1-ца
       }

        System.out.println(result);

или директно с ternary operator

        int n = 35;
        int p = 2;
        int v = 1;
        int mask = 1 << p;
        int result;

        result = v == 0 ? n & ~mask : n | mask;

        System.out.println(result);

 

1
21/08/2021 00:24:41
NedaM avatar NedaM 1 Точки

Много ти благодаря за помощта и подробното обяснение! 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.