background preloader

Low Level Bit Hacks You Absolutely Must Know

Low Level Bit Hacks You Absolutely Must Know
I decided to write an article about a thing that is second nature to embedded systems programmers - low level bit hacks. Bit hacks are ingenious little programming tricks that manipulate integers in a smart and efficient manner. Instead of performing some operation (such as counting the 1 bits in an integer) by looping over individual bits, these programming nuggets do the same with one or two carefully chosen bitwise operations. To get things going I'll assume that you know what the two's complement binary representation of an integer is and also that you know all the the bitwise operations. I'll use the following notation for bitwise operations in the article: & - bitwise and | - bitwise or ^ - bitwise xor ~ - bitwise not << - bitwise shift left >> - bitwise shift right The numbers in the article are 8 bit signed integers (though the operations work on arbitrary length signed integers) that are represented as two's complement and they are usually named 'x'. Here we go. Bit Hack #1. 1. 2.

Programming Methodology - Download free content from Stanford Binary Game Skip to Content | Skip to Footer Cisco Binary Game The Cisco Binary Game is the best way to learn and practice the binary number system. It is great for classes, students and teachers in science, math, digital electronics, computers, programming, logic and networking. It is also a LOT of fun to play for anyone who likes to play fast-paced arcade games.

Low Level Details When I started programming many of the elements we take for granted now, did not exist. There was no DirectX and not many compatible libs were available for the free compilers of the day. So I had to write my own code for most basic programs, keyboard handlers, mouse handlers, video memory accessors, rasterizers, texture mappers, blitters… the programs I wrote then were 100% my own code and I had to be able to handle anything and everything. Personally I’ve always been interested in what was going on under the hood so this suited me just fine. Combine the two and what you get today is someone who enjoys spending 5 days making that single function 20x faster, who revels in reducing the memory footprint of the primary data structure by 1 byte per element across the entire program whilst simultaneously writing a pre-caching system to avoid the special case issues…. who… well you get the picture… I’m an OCD level sport optimizing geek.

gotoAndLearn() - Free video tutorials from Lee Brimelow on Adobe Flash Bit Twiddling Hacks By Sean Eron Anderson seander@cs.stanford.edu Individually, the code snippets here are in the public domain (unless otherwise noted) — feel free to use them however you please. The aggregate collection and descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and without even the implied warranty of merchantability or fitness for a particular purpose. As of May 5, 2005, all the code has been tested thoroughly. Thousands of people have read it. Contents About the operation counting methodology When totaling the number of operations for algorithms here, any C operator is counted as one operation. Compute the sign of an integer The last expression above evaluates to sign = v >> 31 for 32-bit integers. Alternatively, if you prefer the result be either -1 or +1, then use: sign = +1 | (v >> (sizeof(int) * CHAR_BIT - 1)); // if v < 0 then -1, else +1 sign = (v ! Patented variation: f = v && ! Sean A.

Higher Order Macros in C++ Optimizing C and C++ Code Embedded software often runs on processors with limited computation power, thus optimizing the code becomes a necessity. In this article we will explore the following optimization techniques for C and C++ code developed for Real-time and Embedded Systems. Many techniques discussed here have roots in the material we covered in the articles dealing with C to Assembly translation. A good understanding of the following articles will help: Premature optimization is the root of all evil Donald Knuth wrote, "Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. In general, correctness and readability considerations trump code performance issues for most of your code. Adjust structure sizes to power of two Place case labels in narrow range Place frequent case labels first Splitting a switch statement

turing Cache Coherency explained Cache coherency explained The Intel SA-110 StrongARM processor is a Harvard cache architecture processor – hence it uses separate instruction and data caches, and in addition its data cache is a write-back cache. This raises cache coherency problems in a multiprocessing configuration. Caching explained Most modern microprocessors contain some form of instruction and data caching where a small but fast bit of memory is used to speed up access to main memory. Again at its simplest level, a cache must be write-through cache whenever the processor performs a write to main memory. The problem is, writes to main memory are usually even slower than reads. Write-back Caching explained A write-back cache is for obvious reasons somewhat more complicated than that for a write-through cache. Cache incoherency Now imagine if there were two processors of this type accessing a particular area of memory at the same time. Software based Cache Coherency 1. 2. 3. Conclusions

Pointer Basics This document introduces the basics of pointers as they work in several computer languages -- C, C++, Java, and Pascal. This document is the companion document for the Pointer Fun with Binky digital video, or it may be used by itself. This is document 106 in the Stanford CS Education Library. Section 1 -- Pointer Rules One of the nice things about pointers is that the rules which govern how they work are pretty simple. 1) Pointers and Pointees A pointer stores a reference to something. The above drawing shows a pointer named x pointing to a pointee which is storing the value 42. Allocating a pointer and allocating a pointee for it to point to are two separate steps. 2) Dereferencing The dereference operation starts at the pointer and follows its arrow over to access its pointee. The dereference operation on a pointer only works if the pointer has a pointee -- the pointee must be allocated and the pointer must be set to point to it. 3) Pointer Assignment Section 3 -- Study Questions

A Stick Figure Guide to the Advanced Encryption Standard (AES) (A play in 4 acts. Please feel free to exit along with the stage character that best represents you. Take intermissions as you see fit. Click on the stage if you have a hard time seeing it. If you get bored, you can jump to the code. Act 1: Once Upon a Time... Act 2: Crypto Basics Act 3: Details Act 4: Math! Epilogue I created a heavily-commented AES/Rijndael implementation to go along with this post and put it on GitHub. The Design of Rijndael is the book on the subject, written by the Rijndael creators. Please leave a comment if you notice something that can be better explained. Update #1: Several scenes were updated to fix some errors mentioned in the comments.Update #2: By request, I've created a slide show presentation of this play in both PowerPoint and PDF formats.

The Tao Of Programming Translated by Geoffrey James Transcribed by Duke Hillard Transmitted by Anupam Trivedi, Sajitha Tampi, and Meghshyam Jagannath Re-html-ized and edited by Kragen Sittler Last modified 1996-04-10 or earlier Table of Contents Book 1 - The Silent Void Thus spake the master programmer: ``When you have learned to snatch the error code from the trap frame, it will be time for you to leave.'' Something mysterious is formed, born in the silent void. If the Tao is great, then the operating system is great. The Tao of Programming flows far away and returns on the wind of morning. The Tao gave birth to machine language. The assembler gave birth to the compiler. Each language has its purpose, however humble. But do not program in COBOL if you can avoid it. In the beginning was the Tao. Programmers that do not comprehend the Tao are always running out of time and space for their programs. How could it be otherwise? The wise programmer is told about Tao and follows it. The highest sounds are hardest to hear.

Free Books A lot of people keep asking about a good list of programming books. Hence, we are building this list to save your time and to spread the knowledge. Some of these books will definitely help us to evolve our coding skills and thought processes for developing better solutions. Meta-List Graphics Programming Language Agnostic: NerdDinner Walkthrough Assembly Language: Bash Advanced Bash-Scripting Guide See .NET below Django Djangobook.com Emacs The Emacs manual Thanks Emacser (October 17, 2010) Forth Git Haskell Dive Into HTML5 Java JavaScript Linux Advanced Linux Programming Lisp Lua Programming In Lua (for v5 but still largely relevant) Maven Mercurial NoSQL CouchDB: The Definitive Guide Objective-C The Objective-C Programming Language Parrot / Perl 6 Perl 6 (Work in progress) Perl PowerShell Mastering PowerShell Prolog PostgreSQL Practical PostgreSQL Python Learn REBOL Thanks Nick (October 19, 2010) Ruby Scala Scheme The Scheme Programming Language (Edition 4) Smalltalk Subversion SQL (Implementation agnostic) Symfony Vim

Ethiopian multiplication Ethiopian multiplication You are encouraged to solve this task according to the task description, using any language you may know. A method of multiplying integers using only addition, doubling, and halving. Method: Take two numbers to be multiplied and write them down at the top of two columns. For example: 17 × 34 Halving the first column: Doubling the second column: Strike-out rows whose first cell is even: Sum the remaining numbers in the right-hand column: So 17 multiplied by 34, by the Ethiopian method is 578. The task is to define three named functions/methods/procedures/subroutines: one to halve an integer, one to double an integer, and one to state if an integer is even. Use these functions to create a function that does Ethiopian multiplication. References [edit] ACL2 [edit] ActionScript Output: ex. 17 348 68 Strike4 136 Strike2 272 Strike1 544 Keep= 578 [edit] Ada package Ethiopian is function Multiply(Left, Right : Integer) return Integer;end Ethiopian; [edit] Aime [edit] ALGOL 68 Output:

Related: