[Exercise] Operators Expressions and Statements - Problem 9: Bit Destroyer
Здравейте!
Може ли някой просто да ми потвърди реда на мисли - искам да съм сигурен, че съм разбрал правилно побитовите операции и тази задача ми се видя подходяща. Ето кода:
И сега започвам така:
1. Потребителят въвежда някакво произволно число и позиция на бита, който иска да смени. Прочитаме и двете числа.
2. Правим маската, която ни е числото 1, т.к. то представлява в двуичен код 0000 0001 и най-лесно се работи с него.
3. Преместваме първия бит на маската ( 1, защото се започваме да броим от 0 ) наляво с оператор << толкова пъти, колкото е посочил потребителя за променливата position.
4. С оператора ~ ( тилда, ако не се лъжа ) обръщаме всички битове на маската или: ако p е 3 - 0000 1000 / първия бит е вече преместен 3 пъти наляво / и с ~ вече новота маска е: 1111 0111.
5. С оператора & ( и ) сравняваме двете числа / тяхната двуична репрезентация /, а именно:
ако е въведено числото 42 и p е 3 - навсякъде, където бита на числото 42 е 0, а бита на маската е 1, получваме резултат 1. На позиция 3 съответно вече имаме 1ца / ако бита на 3та позиция на числото 42 е 1 / или 0, ако бита на позиция 3 на числото 42 е 0.
По този начин получаваме битовете на числото 34.
Правилно ли е така или бъркам някъде?
Здравей!
Благодаря много, видях си грешката: от таблицата с резултатите на операторите съм гледал грешната колона, която всъщност е "|" ( или ). Ако не греша, аз съм обяснил действието на оператора "|" ( ИЛИ ) вместо на "&" ( И ).
Относно запълващите 0-и: да, знам, че според типа на променливата има определен брой водещи нули, но все пак благодаря за hint-а :)
А относно кода и останалата част от разсъжденията ми, ок ли е?