The goal of this assignment is for you to understand bitwise operators, and how to use them to manipulate
data (including integers and ASCII codes for characters) programmatically. For this assignment you will be
programming in Java, because you should already be familiar with it. The concepts of bitwise operations
that you apply here will be used throughout the remainder of this course, including in machine language,
assembly language, and C programs.
You will complete the Java methods in the provided files: BitVector.java, Bases.java, and Operations.java.
The comments in the provided code files describe what each method should accomplish. The restrictions on
which operators you are allowed to use may change between files and sometimes within methods of the same
file, so it is in your best interest to read each comment carefully. Before you start this assignment, please
read the rest of this document for more detailed instructions and hints.
1.3 Criteria
Your coding grade is based on: 1) the correct output from your methods; 2) not using any banned operators;
and 3) not hardcoding a literal result from a method, or any other such workaround. The grade you see on
Gradescope is the grade you receive, unless we find that you’ve hardcoded return values.
You may submit your code to Gradescope as many times as you like until the deadline. We will only grade
your last submission. We have also provided a local autograder that you can test your code with. Submit to
Gradescope early and often, to help ensure that you do not encounter issues submitting at the last minute.
1. Make sure all 4 files are in the same folder:
(a) BitVector.java
(b) Bases.java
(c) Operations.java
(d) hw1checker.jar
Note: An Examples.java file is also included which shows and explains examples of two methods
similar to those used in your assignment. This is just provided for reference, so there are no tasks to
be completed within it.
2. Complete all of the methods in the three java files, in the order that they appear above. Run the
autograder and verifier (instructions below) frequently to avoid errors and to ensure that you are only
using the allowed operations.
If you get stuck, a helpful file to check out is Examples.java. It has detailed explanations for how to
complete similar methods.
2
3 How to run the auto-grader & verifier
1. Make sure that the hw1checker.jar file is in the same folder as your BitVector.java, Bases.java,
and Operations.java files.
2. Navigate to this folder in your command line.
3. Run the desired command (see below).
3.1 Commands
1. Test all methods and verify that no banned operations are being used (checks all 3 files):
java -jar hw1checker.jar
Note: Your grade will be dependent on the output of the above command, as it will both
test the output of your methods, and verify that you are not using banned operations. If
you get stuck though, you can use some of the below commands to help you debug.
On Windows and Mac, you can also double click the hw1checker.jar in your file explorer to test
and verify all 3 files. The results will be placed in a new file called gradeLog.txt. Any errors with
compilation, infinite loops, or other runtime errors will be placed in a new file called errorLog.txt.
2. Test & verify all methods in a single file. Useful for when you just want to look at one file at a time.
For example, using Bases.java:
java -jar hw1checker.jar -g Bases.java
3. Test all methods in a single file without running verifier. This means that this will only run the unit
tests, and will not check for the use of banned operations. Useful for when you just want to try and
get something that works. For example, using Bases.java:
java -jar hw1checker.jar -t Bases.java
4. Verify all methods in a single file without running tests. For example, using Bases.java:
java -jar hw1checker.jar -v Bases.java
5. Any combination of files can also be graded, tested, or verified at the same time. For example grading,
Bases.java and Operations.java simultaneously:
java -jar hw1checker.jar -g Bases.java Operations.java
3.2 Note for M1 Mac Users
When running the autograder, you may see some UnsatisfiedLinkErrors above the autograder output
with the message starting “cannot open shared object file”. Ignore them, they will not affect your score.
4 Rubric
The grade the autograder gives you should be the same as the grade you get (unless you intentionally
hardcode just the solutions or try to hack the autograder).
3
5 Deliverables
1. Please upload the following 3 files to the “Homework 1: Bases and Bitwise Operations” assignment on
Gradescope:
(a) BitVector.java
(b) Bases.java
(c) Operations.java
6 Hints
6.1 Printing numbers in different bases
Remember that all numbers are stored in your computer as binary. When you perform operations such as
System.out.println(), the computer does the translation into another base for you. All you need to do is
tell the computer how you are representing your numbers, and how to interpret them.
For example, you can specify 16 in decimal, octal, or hexadecimal like so:
System.out.println(16); // decimal (base 10), the default
System.out.println(020); // octal (base 8), precede the number with a zero
System.out.println(0x10); // hexadecimal (base 16), precede the number with a “0x” (zero x)
You can also tell Java to print out your number in different bases using a method called printf. printf is
the GRANDFATHER of all printing functions! When we get to C programming, you will be using it a lot.
It is useful if you would like to write your own tester as well.
printf takes a variable number of arguments, the first of which is a format string. After the format string
come the parameters. The formatting for the numbers is controlled by the format string.
6.1.1 Example
System.out.printf(“In decimal: %d”, 16);
System.out.printf(“In octal: %o”, 16);
System.out.printf(“In hexadecimal: %x”, 16);
The %d, %o, or %x get replaced by the parameter passed in. printf does not support printing the number out
in binary.
For more information about printf read http://en.wikipedia.org/wiki/Printf.
6.2 Multiplication and division
You may find that there are times in which you need to use division or multiplication, but are not allowed
to. Recall from lecture that you can use bitshifting to multiply or divide by powers of 2; this concept isn’t
found in the book, but is in the lecture slides.
7 Rules and Regulations
7.1 General Rules
1. You should write your code with useful comments that explain any algorithms you use (i.e., do not
write a comment for every statement.) While comments are not graded, writing comments will make
your code easier to understand, both by yourself and by any TAs that you visit during office hours.
2. Although you may ask TAs for clarification, you are ultimately responsible for what you submit. This
means that (in the case of demos) you should come prepared to explain to the TA how any piece of
code you submitted works.
3. Please read the assignment in its entirety before asking questions.
4. Please start assignments early, and ask for help early. Do not email us the night the assignment is due
with questions.
5. If you find any problems with the assignment it would be greatly appreciated if you reported them to
the authors (which can be found at the top of the assignment). Announcements will be posted if the
assignment changes.
7.2 Submission Conventions
1. All files you submit for assignments in this course should have your name at the top of the file as
a comment for any source code file, and somewhere in the file, near the top, for other files unless
otherwise noted.
2. Submit all three files that you edited to Gradescope.
3. Do not submit compiled files, that is .class files for Java code and .o files for C code. Only submit the
files we ask for in the assignment.
4. Do not submit links to files. The autograder does not understand it, and we will not manually grade
assignments submitted this way as it is easy to change the files after the submission period ends.
7.3 Submission Guidelines
1. You are responsible for turning in assignments on time. This includes allowing for unforeseen circumstances. If you have an emergency let us know IN ADVANCE of the due time supplying documentation (i.e. note from the dean, doctor’s note, etc). Extensions will only be granted to those who contact
us in advance of the deadline and no extensions will be made after the due date.
2. You are also responsible for ensuring that what you turned in is what you meant to turn in. After
submitting you should be sure to download your submission into a brand new folder and test if it
works. No excuses if you submit the wrong files, what you turn in is what we grade. In addition, your
assignment must be turned in via Gradescope. Under no circumstances whatsoever we will accept any
email submission of an assignment. Note: if you were granted an extension you will still turn in the
assignment over Gradescope.
3. Make sure to start working on your assignments early, and keep track of all due dates. See the syllabus
for information regarding late submissions; any penalties associated with unexcused late submissions
are non-negotiable.
7.4 Syllabus Excerpt on Academic Misconduct
Academic misconduct is taken very seriously in this class. Quizzes, timed labs and the final examination are
individual work.
Homework assignments are collaborative at a high level – but you must turn in your own original work. In
addition, many homework assignments will be evaluated via demo or code review. During this evaluation,
you will be expected to be able to explain every aspect of your submission. Homework assignments will also
be examined using electronic computer programs to find evidence of unauthorized collabortion.
What is unauthorized collaboration? Each individual programming assignment should be coded by you.
You may work with others, but each student should be turning in their own version of the assignment.
Submissions that are essentially identical will receive a zero and will be sent to the Dean of Students’ Office
of Academic Integrity. Submissions that are copies that have been superficially modified to conceal that
they are copies are also considered unauthorized collaboration.
You are expressly forbidden to supply a copy of your homework to another student via electronic means. This includes simply e-mailing it to them so they can look at it. If you supply
an electronic copy of your homework to another student and they are charged with copying,
you will also be charged. This includes storing your code on any site which would allow other
parties to obtain your code such as but not limited to public repositories (Github), pastebin,
etc. If you would like to use version control, use a private repository on github.gatech.edu.
7.5 Is collaboration allowed?
Collaboration is allowed on a high level, meaning that you may discuss design points and concepts relevant
to the homework with your peers, share algorithms and pseudo-code, as well as help each other debug code.
What you shouldn’t be doing, however, is pair programming where you collaborate with each other on a
single instance of the code. Furthermore, sending an electronic copy of your homework to another student
for them to look at and figure out what is wrong with their code is not an acceptable way to help them,
because it is frequently the case that the recipient will simply modify the code and submit it as their own.
Figure 1: Collaboration rules, explained colorfully
Reviews
There are no reviews yet.