343.md at [43596fa317]

Login

File tip/343.md artifact 7f6cf721ea part of check-in 43596fa317


# TIP 343: A Binary Specifier for [format/scan]
	Author:		Alexandre Ferrieux <[email protected]>
	State:		Final
	Type:		Project
	Vote:		Done
	Created:	03-Dec-2008
	Post-History:	
	Keywords:	Tcl,binary
	Tcl-Version:	8.6
	Tcl-Ticket:		2368084
-----

# Abstract

This TIP proposes to add a %b specifier to the **format** and **scan**
commands for working with integers in base-2 representation.

# Background

The **format** and **scan** commands already have decimal, hexadecimal,
and octal support, but people wanting binary today resort to a hack, namely
going hexadecimal first and then **string map**ping the hex digits to their
four-bits binary representations. We also already have the "0b" notation as
input for **expr**. This lack is inelegant.

# Proposed Change

This TIP proposes to reuse the existing binary representation machinery to
expose a new **%b** specifier:

		format %b 5
		=> 101
		scan 000101 %b x;set x
		=> 5

The good properties of the existing code make the addition really painless, in
that it automagically combines with the size \(l,ll\), width \(digits\), and
prefix \(\#\) modifiers:

		format %#06b 5
		=> 0b0101
		format %llb [expr {(2**72-1)/7}]
		1001001001001001001001001001001001001001001001001001001001001001001001

# Rationale

That is really low-hanging fruit. All the pieces are in place, it's just a
matter of exposition. The binary representation is a nice pedagogic tool, and
having it handy \(rather than with a hack\) is a bonus.

# Reference Implementation

See Patch 2368084 <https://sourceforge.net/support/tracker.php?aid=2368084> .

# Copyright

This document has been placed in the public domain.