<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: bit code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 26 Jul 2008 21:12:59 GMT</pubDate>
    <description>DZone Snippets: bit code</description>
    <item>
      <title>Bitwise Operation: Quickly Convert Binary Bit to Integer and vice versa using Javascript Shell</title>
      <link>http://snippets.dzone.com/posts/show/4740</link>
      <description>using JavaScript shell found at www.squarefree.com/shell/ , it's very easy to convert binary bit to integer and vice versa&lt;br /&gt;&lt;br /&gt;convert integer to binary bit string&lt;br /&gt;&lt;code&gt;&lt;br /&gt;num = 1024&lt;br /&gt;num.toString(2)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;convert binary bit string to integer&lt;br /&gt;&lt;code&gt;&lt;br /&gt;parseInt('111', 2)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 07 Nov 2007 05:56:13 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4740</guid>
      <author>agilekai (kai)</author>
    </item>
    <item>
      <title>nsieve for Ruby</title>
      <link>http://snippets.dzone.com/posts/show/4635</link>
      <description>From: &lt;a href="http://shootout.alioth.debian.org/debian/benchmark.php?test=nsievebits&amp;lang=ruby&amp;id=2"&gt;The Great Computer Language Shootout: nsieve-bits Ruby&lt;/a&gt;&lt;br /&gt;Author: Glenn Parker&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;CharExponent = 3&lt;br /&gt;BitsPerChar = 1 &lt;&lt; CharExponent&lt;br /&gt;LowMask = BitsPerChar - 1&lt;br /&gt;&lt;br /&gt;def sieve(m)&lt;br /&gt;  ret = []&lt;br /&gt;  items = "\xFF" * ((m / BitsPerChar) + 1)&lt;br /&gt;  masks = ""&lt;br /&gt;  BitsPerChar.times do |b|&lt;br /&gt;    masks &lt;&lt; (1 &lt;&lt; b).chr&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  count = 0&lt;br /&gt;  pmax = m - 1&lt;br /&gt;  2.step(pmax, 1) do |p|&lt;br /&gt;    if items[p &gt;&gt; CharExponent][p &amp; LowMask] == 1&lt;br /&gt;      ret &lt;&lt; p&lt;br /&gt;      count += 1&lt;br /&gt;      p.step(pmax, p) do |mult|&lt;br /&gt;	a = mult &gt;&gt; CharExponent&lt;br /&gt;	b = mult &amp; LowMask&lt;br /&gt;	items[a] -= masks[b] if items[a][b] != 0&lt;br /&gt;        #p items&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  #count&lt;br /&gt;  ret&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;n = (ARGV[0] || 2).to_i&lt;br /&gt;n.step(n - 2, -1) do |exponent|&lt;br /&gt;  break if exponent &lt; 0&lt;br /&gt;  m = 2 ** exponent * 10_000&lt;br /&gt;  primes = sieve(m)&lt;br /&gt;  count = primes.size&lt;br /&gt;  puts&lt;br /&gt;  printf "Primes up to %8d %8d\n", m, count&lt;br /&gt;  puts "last ten primes: #{primes[-10..-1].join(' ')}"&lt;br /&gt;  puts&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Thu, 11 Oct 2007 16:19:39 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4635</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>Convert a long to HEX value and the other way around</title>
      <link>http://snippets.dzone.com/posts/show/4593</link>
      <description>Handy to convert MD5 or SHA-1 hash values.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;	public static long hexToLong(byte[] bytes) {&lt;br /&gt;&lt;br /&gt;		if (bytes.length &gt; 16) {&lt;br /&gt;			throw new IllegalArgumentException("Byte array too long (max 16 elements)");&lt;br /&gt;		}&lt;br /&gt;		long v = 0;&lt;br /&gt;		for (int i = 0; i &lt; bytes.length; i += 2) {&lt;br /&gt;			byte b1 = (byte) (bytes[i] &amp; 0xFF);&lt;br /&gt;&lt;br /&gt;			b1 -= 48;&lt;br /&gt;			if (b1 &gt; 9) b1 -= 39;&lt;br /&gt;&lt;br /&gt;			if (b1 &lt; 0 || b1 &gt; 15) {&lt;br /&gt;				throw new IllegalArgumentException("Illegal hex value: " + bytes[i]);&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			b1 &lt;&lt;=4;&lt;br /&gt;&lt;br /&gt;			byte b2 = (byte) (bytes[i + 1] &amp; 0xFF);&lt;br /&gt;			b2 -= 48;&lt;br /&gt;			if (b2 &gt; 9) b2 -= 39;&lt;br /&gt;&lt;br /&gt;			if (b2 &lt; 0 || b2 &gt; 15) {&lt;br /&gt;				throw new IllegalArgumentException("Illegal hex value: " + bytes[i + 1]);&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			v |= (((b1 &amp; 0xF0) | (b2 &amp; 0x0F))) &amp; 0x00000000000000FFL ;&lt;br /&gt;&lt;br /&gt;			if (i + 2 &lt; bytes.length) v &lt;&lt;= 8;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		return v;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static byte[] longToHex(final long l) {&lt;br /&gt;		long v = l &amp; 0xFFFFFFFFFFFFFFFFL;&lt;br /&gt;&lt;br /&gt;		byte[] result = new byte[16];&lt;br /&gt;		Arrays.fill(result, 0, result.length, (byte)0);&lt;br /&gt;&lt;br /&gt;		for (int i = 0; i &lt; result.length; i += 2) {&lt;br /&gt;			byte b = (byte) ((v &amp; 0xFF00000000000000L) &gt;&gt; 56);&lt;br /&gt;&lt;br /&gt;			byte b2 = (byte) (b &amp; 0x0F);&lt;br /&gt;			byte b1 = (byte) ((b &gt;&gt; 4) &amp; 0x0F);&lt;br /&gt;&lt;br /&gt;			if (b1 &gt; 9) b1 += 39;&lt;br /&gt;			b1 += 48;&lt;br /&gt;&lt;br /&gt;			if (b2 &gt; 9) b2 += 39;&lt;br /&gt;			b2 += 48;&lt;br /&gt;&lt;br /&gt;			result[i] = (byte) (b1 &amp; 0xFF);&lt;br /&gt;			result[i + 1] = (byte) (b2 &amp; 0xFF);&lt;br /&gt;&lt;br /&gt;			v &lt;&lt;= 8;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		return result;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And tests:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;	public void testHexToLong() throws Exception {&lt;br /&gt;		assertEquals(-7057002501900618110L, NumberUtils.hexToLong("9e107d9d372bb682".getBytes()));&lt;br /&gt;		assertEquals(-10908158098650842L, NumberUtils.hexToLong("ffd93f1687604926".getBytes()));&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public void testLongToHex() throws Exception {&lt;br /&gt;		assertEquals("9e107d9d372bb682", new String(NumberUtils.longToHex(-7057002501900618110L)));&lt;br /&gt;		assertEquals("ffd93f1687604926", new String(NumberUtils.longToHex(-10908158098650842L)));&lt;br /&gt;	}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 30 Sep 2007 23:30:01 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4593</guid>
      <author>devijvers (Steven Devijver)</author>
    </item>
    <item>
      <title>BitField: A fast(ish), pure Ruby bit field "type"</title>
      <link>http://snippets.dzone.com/posts/show/4234</link>
      <description>&lt;code&gt;#        NAME: BitField&lt;br /&gt;#      AUTHOR: Peter Cooper&lt;br /&gt;#     LICENSE: MIT ( http://www.opensource.org/licenses/mit-license.php )&lt;br /&gt;#   COPYRIGHT: (c) 2007 Peter Cooper (http://www.petercooper.co.uk/)&lt;br /&gt;#     VERSION: v4&lt;br /&gt;#     HISTORY: v4 (fixed bug where setting 0 bits to 0 caused a set to 1)&lt;br /&gt;#              v3 (supports dynamic bitwidths for array elements.. now doing 32 bit widths default)&lt;br /&gt;#              v2 (now uses 1 &lt;&lt; y, rather than 2 ** y .. it's 21.8 times faster!)&lt;br /&gt;#              v1 (first release)&lt;br /&gt;#&lt;br /&gt;# DESCRIPTION: Basic, pure Ruby bit field. Pretty fast (for what it is) and memory efficient.&lt;br /&gt;#              I've written a pretty intensive test suite for it and it passes great. &lt;br /&gt;#              Works well for Bloom filters (the reason I wrote it).&lt;br /&gt;#&lt;br /&gt;#              Create a bit field 1000 bits wide&lt;br /&gt;#                bf = BitField.new(1000)&lt;br /&gt;#&lt;br /&gt;#              Setting and reading bits&lt;br /&gt;#                bf[100] = 1&lt;br /&gt;#                bf[100]    .. =&gt; 1&lt;br /&gt;#                bf[100] = 0&lt;br /&gt;#&lt;br /&gt;#              More&lt;br /&gt;#                bf.to_s = "10101000101010101"  (example)&lt;br /&gt;#                bf.total_set         .. =&gt; 10  (example - 10 bits are set to "1")&lt;br /&gt;&lt;br /&gt;class BitField&lt;br /&gt;  attr_reader :size&lt;br /&gt;  include Enumerable&lt;br /&gt;  &lt;br /&gt;  ELEMENT_WIDTH = 32&lt;br /&gt;  &lt;br /&gt;  def initialize(size)&lt;br /&gt;    @size = size&lt;br /&gt;    @field = Array.new(((size - 1) / ELEMENT_WIDTH) + 1, 0)&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  # Set a bit (1/0)&lt;br /&gt;  def []=(position, value)&lt;br /&gt;    if value == 1&lt;br /&gt;      @field[position / ELEMENT_WIDTH] |= 1 &lt;&lt; (position % ELEMENT_WIDTH)&lt;br /&gt;    elsif (@field[position / ELEMENT_WIDTH]) &amp; (1 &lt;&lt; (position % ELEMENT_WIDTH)) != 0&lt;br /&gt;      @field[position / ELEMENT_WIDTH] ^= 1 &lt;&lt; (position % ELEMENT_WIDTH)&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  # Read a bit (1/0)&lt;br /&gt;  def [](position)&lt;br /&gt;    @field[position / ELEMENT_WIDTH] &amp; 1 &lt;&lt; (position % ELEMENT_WIDTH) &gt; 0 ? 1 : 0&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  # Iterate over each bit&lt;br /&gt;  def each(&amp;block)&lt;br /&gt;    @size.times { |position| yield self[position] }&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  # Returns the field as a string like "0101010100111100," etc.&lt;br /&gt;  def to_s&lt;br /&gt;    inject("") { |a, b| a + b.to_s }&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  # Returns the total number of bits that are set&lt;br /&gt;  # (The technique used here is about 6 times faster than using each or inject direct on the bitfield)&lt;br /&gt;  def total_set&lt;br /&gt;    @field.inject(0) { |a, byte| a += byte &amp; 1 and byte &gt;&gt;= 1 until byte == 0; a }&lt;br /&gt;  end&lt;br /&gt;end&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Here's the tests if you want to run:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require "test/unit"&lt;br /&gt;require "bitfield"&lt;br /&gt;&lt;br /&gt;class TestLibraryFileName &lt; Test::Unit::TestCase&lt;br /&gt;  def setup&lt;br /&gt;    @public_bf = BitField.new(1000)&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def test_basic&lt;br /&gt;    assert_equal 0, BitField.new(100)[0]&lt;br /&gt;    assert_equal 0, BitField.new(100)[1]&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def test_setting_and_unsetting&lt;br /&gt;    @public_bf[100] = 1&lt;br /&gt;    assert_equal 1, @public_bf[100]&lt;br /&gt;    @public_bf[100] = 0&lt;br /&gt;    assert_equal 0, @public_bf[100]&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def test_random_setting_and_unsetting&lt;br /&gt;    100.times do&lt;br /&gt;      index = rand(1000)&lt;br /&gt;      @public_bf[index] = 1&lt;br /&gt;      assert_equal 1, @public_bf[index]&lt;br /&gt;      @public_bf[index] = 0&lt;br /&gt;      assert_equal 0, @public_bf[index]&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def test_multiple_setting&lt;br /&gt;    1.upto(999) do |pos|&lt;br /&gt;      2.times { @public_bf[pos] = 1 }&lt;br /&gt;      assert_equal 1, @public_bf[pos]&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def test_multiple_unsetting&lt;br /&gt;    1.upto(999) do |pos|&lt;br /&gt;      2.times { @public_bf[pos] = 0 }&lt;br /&gt;      assert_equal 0, @public_bf[pos]&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def test_size&lt;br /&gt;    assert_equal 1000, @public_bf.size&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def test_to_s&lt;br /&gt;    bf = BitField.new(10)&lt;br /&gt;    bf[1] = 1&lt;br /&gt;    bf[5] = 1&lt;br /&gt;    assert_equal "0100010000", bf.to_s&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def test_total_set&lt;br /&gt;    bf = BitField.new(10)&lt;br /&gt;    bf[1] = 1&lt;br /&gt;    bf[5] = 1&lt;br /&gt;    assert_equal 2, bf.total_set&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 02 Jul 2007 01:16:55 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4234</guid>
      <author>peter (Peter Cooperx)</author>
    </item>
    <item>
      <title>Java - showBitPlanes</title>
      <link>http://snippets.dzone.com/posts/show/2970</link>
      <description>// the input it must be a b/w image&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public BufferedImage showBitPlanes(BufferedImage bi, int lv)&lt;br /&gt;	{&lt;br /&gt;		int level = 0;&lt;br /&gt;		&lt;br /&gt;		switch(level)&lt;br /&gt;		{&lt;br /&gt;			case 0:&lt;br /&gt;				level = 128;&lt;br /&gt;				break;&lt;br /&gt;			case 1:&lt;br /&gt;				level = 64;&lt;br /&gt;				break;&lt;br /&gt;			case 2:&lt;br /&gt;				level = 32;&lt;br /&gt;				break;&lt;br /&gt;			case 3:&lt;br /&gt;				level = 16;&lt;br /&gt;				break;&lt;br /&gt;			case 4:&lt;br /&gt;				level = 8;&lt;br /&gt;				break;&lt;br /&gt;			case 5:&lt;br /&gt;				level = 4;&lt;br /&gt;				break;&lt;br /&gt;			case 6:&lt;br /&gt;				level = 2;&lt;br /&gt;				break;&lt;br /&gt;			case 7:&lt;br /&gt;				level = 1;&lt;br /&gt;				break;&lt;br /&gt;			default:&lt;br /&gt;					return null;&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		int width = bi.getWidth();&lt;br /&gt;		int height = bi.getHeight();&lt;br /&gt;		&lt;br /&gt;		BufferedImage img = new BufferedImage(width, height, bi.getType());&lt;br /&gt;		&lt;br /&gt;		for(int x=0; x&lt;width; x++)&lt;br /&gt;			for(int y=0; y&lt;height; y++)&lt;br /&gt;				img.setRGB(x, y, ((bi.getRGB(x, y) &amp; level)/level)*255);&lt;br /&gt;		&lt;br /&gt;		return img;&lt;br /&gt;	}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 05 Nov 2006 00:41:29 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2970</guid>
      <author>whitetiger ()</author>
    </item>
    <item>
      <title>Matlab - showBitPlanes</title>
      <link>http://snippets.dzone.com/posts/show/2969</link>
      <description>&lt;code&gt;&lt;br /&gt;% Ritorna i Bit Plabes dell'immagine a toni di grigio&lt;br /&gt;&lt;br /&gt;function showBitPlanes(img)&lt;br /&gt;&lt;br /&gt;    imgGray = double( rgb2gray(img) );&lt;br /&gt;    titleString = 'bit planes ';&lt;br /&gt;    &lt;br /&gt;    % MSB ... LSB&lt;br /&gt;    k = 128;&lt;br /&gt;    &lt;br /&gt;    for b=1:8&lt;br /&gt;        &lt;br /&gt;        subplot(2, 4, b);&lt;br /&gt;        imshow( (bitand(imgGray, k) / k) * 255 ); % Fa un and dei bit&lt;br /&gt;        title([titleString int2str(b-1)]);&lt;br /&gt;        k = k/2; % Shifta di 2 i bit&lt;br /&gt;        &lt;br /&gt;    end;&lt;br /&gt;    &lt;br /&gt;return;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 05 Nov 2006 00:16:40 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2969</guid>
      <author>whitetiger ()</author>
    </item>
    <item>
      <title>Simple bit operations //Pascal functions</title>
      <link>http://snippets.dzone.com/posts/show/2194</link>
      <description>Get, Clear, Set and Enable bit operations for pascal.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;function GetBit(const Value: DWord; const Bit: Byte): Boolean;&lt;br /&gt;begin&lt;br /&gt;  Result := (Value and (1 shl Bit)) &lt;&gt; 0;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function ClearBit(const Value: DWord; const Bit: Byte): DWord;&lt;br /&gt;begin&lt;br /&gt;	Result := Value and not (1 shl Bit);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function SetBit(const Value: DWord; const Bit: Byte): DWord;&lt;br /&gt;begin&lt;br /&gt;	Result := Value or (1 shl Bit);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function EnableBit(const Value: DWord; const Bit: Byte; const TurnOn: Boolean): DWord;&lt;br /&gt;begin&lt;br /&gt;	Result := (Value or (1 shl Bit)) xor (Integer(not TurnOn) shl Bit);&lt;br /&gt;end;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 15 Jun 2006 18:35:07 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2194</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
  </channel>
</rss>
