#include <iostream>
#include <bitset>
using namespace std;
unsigned
invert( unsigned x, int p, int n)
{
int count = sizeof ( x) * 8 ;
unsigned t = ( ( unsigned ) ~0 << ( p - 1 ) ) >> ( count - n) << ( count - n - p + 1 ) ;
return ( ~x & t) | ( x & ~t) ;
}
int
main( )
{
unsigned x;
int p, n;
cout << "Введите x в шестнадцатеричной: " << endl;
cin >> hex >> x;
cout << "Введите p позицию и число инвертированных битов n " << endl;
cin >> dec >> p >> n;
cout << "Исходный x " << bitset< sizeof ( x) * 8 > ( x) << endl
<< "Инвертированный x " << bitset< sizeof ( x) * 8 > ( invert( x, p, n) ) << endl;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0c2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1bnNpZ25lZAppbnZlcnQodW5zaWduZWQgeCwgaW50IHAsIGludCBuKQp7CiAgICBpbnQgY291bnQgPSBzaXplb2YoeCkgKiA4OwogICAgdW5zaWduZWQgdCA9ICgodW5zaWduZWQpIH4wIDw8IChwIC0gMSkpID4+IChjb3VudCAtIG4pIDw8IChjb3VudCAtIG4gLSBwICsgMSk7CiAgICByZXR1cm4gKH54ICYgdCkgfCAoeCAmIH50KTsKfQogCmludAptYWluKCkKewogICAgdW5zaWduZWQgeDsKICAgIGludCBwLCBuOwogICAgY291dCA8PCAi0JLQstC10LTQuNGC0LUgeCDQsiDRiNC10YHRgtC90LDQtNGG0LDRgtC10YDQuNGH0L3QvtC5OiAiIDw8IGVuZGw7CiAgICBjaW4gPj4gaGV4ID4+IHg7CiAgICBjb3V0IDw8ICLQktCy0LXQtNC40YLQtSBwINC/0L7Qt9C40YbQuNGOINC4INGH0LjRgdC70L4g0LjQvdCy0LXRgNGC0LjRgNC+0LLQsNC90L3Ri9GFINCx0LjRgtC+0LIgbiAiIDw8IGVuZGw7CiAgICBjaW4gPj4gZGVjID4+IHAgPj4gbjsKICAgIGNvdXQgPDwgItCY0YHRhdC+0LTQvdGL0LkgeCAiIDw8IGJpdHNldDxzaXplb2YoeCkgKiA4Pih4KSA8PCBlbmRsCiAgICAgICAgIDw8ICLQmNC90LLQtdGA0YLQuNGA0L7QstCw0L3QvdGL0LkgeCAiIDw8IGJpdHNldDxzaXplb2YoeCkgKiA4PihpbnZlcnQoeCwgcCwgbikpIDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQ==