Module 1, Topic 2
In Progress

Binary Literals

Module Progress
0% Complete

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.

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!

Responses

Join the Conversation!

Drop us your email and we’ll send you the Code and Grace newsletter. You’ll get highlights from our podcast, news about our recent publications, and notes on what we’re thinking about and enjoying lately.