In Progress
Unit 1, Lesson 1
In Progress

# Binary Literals

I don’t know about you, but even after all these years of UNIX I still have some trouble interpreting octal permissions in my head. In this episode, you’ll learn about a special form of the integer literal syntax that can take the math out of bitfields.

Video transcript & code

I thought we could kick things off with something simple but handy. This week I'm going to do a short series on quoting and literals.

You probably already know a lot of the literal syntax in Ruby. Stuff like literal integers, floating point numbers, and strings.

``````42
3.14159
"foo"
``````

You probably also know that like many languages, Ruby has a literal syntax for hexidecimal and octal numbers:

``````0x7FFF # => 32767
0755   # => 493
``````

Octal numbers are useful for things like specifying unix file permissions.

``````require 'fileutils'
include FileUtils

chmod 0755, 'somefile'
``````

Ruby also supports a slightly less common type of integer literal: binary literals. I don't know about you, but even after all these years of UNIX I still have some trouble translating octal numbers into permissions, and vice-versa, in my head. This is one place binary literals can come in handy.

Let's take a look at the previous example, only using a binary literal this time. First, we'll start with a reminder of the order of permissions bits. From left to write, we have permissions for user, group, and other.

``````# U  G  O
# rwxrwxrwx
``````

Now underneath that, we'll spell out our permission mask as a binary literal.

``````# U  G  O
# rwxrwxrwx
0b111101101
``````

Just to check, we'll translate that to octal form.

``````perms = 0b111101101
perms.to_s(8) # => "755"
``````

Now with our permissions mask in hand, we can set permissions, confident that we've set the desired bits.

``````chmod perms, 'somefile'
``````

And that's it for today. Happy hacking!