Solved

Question about bytes and FileOutputStream

Posted on 2011-09-07
10
212 Views
Last Modified: 2012-08-13
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

0
Comment
Question by:humansg
  • 7
  • 3
10 Comments
 
LVL 47

Expert Comment

by:for_yan
ID: 36497206

data^3 is not the power of 3 - it is bit operation
0
 
LVL 47

Expert Comment

by:for_yan
ID: 36497212
How the question has changed?
0
 

Author Comment

by:humansg
ID: 36497226
I added another question on this
out.write( data[i] | (1 << 1) );

Open in new window


What bits are manipulated in ^3?
0
 
LVL 47

Expert Comment

by:for_yan
ID: 36497229
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
 
LVL 47

Expert Comment

by:for_yan
ID: 36497243
what is
data[i]

Open in new window

- data is not an array
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 47

Accepted Solution

by:
for_yan earned 500 total points
ID: 36497283
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
 

Author Comment

by:humansg
ID: 36497307
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
 
LVL 47

Assisted Solution

by:for_yan
for_yan earned 500 total points
ID: 36497345
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
 
LVL 47

Expert Comment

by:for_yan
ID: 36497352
Actually 50 is ASCII for "2" then it makes sense
0
 

Author Closing Comment

by:humansg
ID: 36497385
Great! Thanks for the enlightenment!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now