Question about bytes and FileOutputStream

File outfile = new File( "Test.bin" );
FileOutputStream out = new FileOutputStream( outfile );

byte data = 0x30; // "0" in hex

out.write( data^3 );

Open in new window


The output in the file when opened with WordPad is "3"

^3 is power to 3. Can anyone explain how it became 3?


And what is this doing?
out.write( data | (1 << 1) );

Open in new window

humansgAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
for_yanConnect With a Mentor Commented:
So initially adata is 48 when you or with 2 it becomes 50 - all as exepcted:

read here:
http://leepoint.net/notes-java/data/expressions/bitops.html

see the result of my compuilation and run of it:

    int data = 0x30;

        System.out.println("datat before " + data);
        System.out.println("data after: " + (data | (1<<1)));

Open in new window



output:

datat before 48
data after: 50

Open in new window

0
 
for_yanCommented:

data^3 is not the power of 3 - it is bit operation
0
 
for_yanCommented:
How the question has changed?
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
humansgAuthor Commented:
I added another question on this
out.write( data[i] | (1 << 1) );

Open in new window


What bits are manipulated in ^3?
0
 
for_yanCommented:
1<<1 shifts bit one position to the left - it becomes 2 as i understand

and this

data | 2

makes bitwise or-ing ads second bit to whatvere bits there are in data
0
 
for_yanCommented:
what is
data[i]

Open in new window

- data is not an array
0
 
humansgAuthor Commented:
Sorry, my mistake.
It should be
out.write( data | (1 << 1) );

Open in new window

Assuming data to be 0x30
byte data = 0x30;

Open in new window


0x30 in binary is 0011 0000
Does that mean it becomes 0110 0000 after applying this (1<<1)?
And after which we will perform a bitwise OR operation
0011 0000 | 0110 0000 = 0111 0000?  (ascii "F")
This don't seems right because the output for this operation is "2" when open with WordPad.
0
 
for_yanConnect With a Mentor Commented:
No you first apply this (1<<1) - it becomes 2
and then your OR 00110000 with 10 and it becomes 50 as I shouwed above
Put System.out.println() before you write it to the file - it should be 50
0
 
for_yanCommented:
Actually 50 is ASCII for "2" then it makes sense
0
 
humansgAuthor Commented:
Great! Thanks for the enlightenment!
0
All Courses

From novice to tech pro — start learning today.