[Homework] C# Basics - Operators, Expressions, Statements - Problem {15*} - Bits Exchange
Здравейте,
имам малък (или не толкова) проблем въпросната задача. Ето го условието:
Write a program that exchanges bits 3, 4 and 5 with bits 24, 25 and 26 of given 32-bit unsigned integer.
Ето го и кода, за да не ми гоните логиката (която може и да липсва в случая ) съм вкарал коментари кое какво прави:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _03_15_BitsExchange
{
class BitsExchange
{
static void Main(string[] args)
{
uint n, l, s, x, y, i;
Console.Write("Enter an integer number: ");
n = uint.Parse(Console.ReadLine());
//s записва стойността на битове 3,4,5 като ги измества на позиции 0,1,2 и след това ги сравнява с логическо "И" с числото 7 (в двоичен вид 111)
s = n >> 3;
s = s & 7;
//l записва стойността на битове 24,25,26 като ги измества на позиции 0,1,2 и след това ги сравнява с логическо "И" с числото 7 (в двоичен вид 111)
l = n >> 24;
l = l & 7;
//x измества битовете записани от позиции 3,4,5 на позиции 24,25,26 в ново число
x = s << 24;
//y измества битовете записани от позиции 24,25,26 на позиции 3,4,5 в ново число
y = l << 3;
//ново число i, което държи разменените позиции на битовете 3,4,5 и 24,25,26
i = x | y;
//n = ? тук искам по някакъв начин да навържа i и n, за да получа новото число с разменени битове, но не ми се получава... :)
Console.WriteLine(n);
}
}
}
Въпроса ми е: има ли шанс програмата да заработи така написана и както се вижда, ако предполжим, че е вярно написано всичко, не мога да се справя с последия логически израз - как да сравня i и n, за да получа ново n с разменени битове.
Всякаква помощ ще ми е от ползва
Благодаря много, оправих я програмата и вече работи :)
Решението ти е екстра - много изчистено и нагледно.
Отдавна сте писали всичко тук и решението на nikola.m.nikolov вече го няма в линка. Някакъв шанс все пак да го видя, че с е справям с побитовите задачи преди тази в третото домашно от C# Basics, но тук вече удрям на камък. Видях решение надолу, но ми се иска да видя варианти, това учи много.
Ifandieva, понеже правих рефакториране в github и преместих всичките си проекти в папка Softuni, трябваше да редактирам всичките си постове във форума, което е малко трудоемко. В профила ми в GitHub всичко е добре подредено, така че няма да имаш проблем да го намериш:
GitHub