Setting a bit
Use the bitwise OR operator (
|) to set a bit.
number |= 1UL << n;
That will set the
nth bit of
n should be zero, if you want to set the
1st bit and so on upto
n-1, if you want to set the
number is wider than
unsigned long; promotion of
1UL << n doesn't happen until after evaluating
1UL << n where it's undefined behaviour to shift by more than the width of a
long. The same applies to all the rest of the examples.
Clearing a bit
Use the bitwise AND operator (
&) to clear a bit.
number &= ~(1UL << n);
That will clear the
nth bit of
number. You must invert the bit string with the bitwise NOT operator (
~), then AND it.
Toggling a bit
The XOR operator (
^) can be used to toggle a bit.
number ^= 1UL << n;
That will toggle the
nth bit of
Checking a bit
You didn't ask for this, but I might as well add it.
To check a bit, shift the number n to the right, then bitwise AND it:
bit = (number >> n) & 1U;
That will put the value of the
nth bit of
number into the variable
Changing the nth bit to x
nth bit to either
0 can be achieved with the following on a 2's complement C++ implementation:
number ^= (-x ^ number) & (1UL << n);
n will be set if
1, and cleared if
x has some other value, you get garbage.
x = !!x will booleanize it to 0 or 1.
To make this independent of 2's complement negation behaviour (where
-1 has all bits set, unlike on a 1's complement or sign/magnitude C++ implementation), use unsigned negation.
number ^= (-(unsigned long)x ^ number) & (1UL << n);
unsigned long newbit = !!x; // Also booleanize to force 0 or 1
number ^= (-newbit ^ number) & (1UL << n);
It's generally a good idea to use unsigned types for portable bit manipulation.
number = (number & ~(1UL << n)) | (x << n);
(number & ~(1UL << n)) will clear the
nth bit and
(x << n) will set the
nth bit to
It's also generally a good idea to not to copy/paste code in general and so many people use preprocessor macros (like the community wiki answer further down) or some sort of encapsulation.
sed -n '16224,16482p;16483q' filename > newfile
From the sed manual:
Print out the pattern space (to the standard output). This command is usually only used in conjunction with the -n command-line option.
If auto-print is not disabled, print the pattern space, then, regardless, replace the pattern space with the next line of input. If
there is no more input then sed exits without processing any more
sed without processing any more commands or input.
Note that the current pattern space is printed if auto-print is not disabled with the -n option.
Addresses in a sed script can be in any of the following forms:
Specifying a line number will match only that line in the input.
An address range can be specified by specifying two addresses
separated by a comma (,). An address range matches lines starting from
where the first address matches, and continues until the second
address matches (inclusively).
Why don't you write a small PERL/PHP/Python script or even a small C++,Java or C# program that does that?
I don't know of any already-made tools to do that but writing the code to parse out the text file and extract a function body from a C++ code file should not take more than 20 lines of code.. The only difficult part will be locating the beginning of the function and that should be a relatively simple task using RegEx. After that, all you need is to iterate through the rest of the file keeping track of opening and closing curly braces and when you reach the function body closing brace you're done.