<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mikael Brevik &#187; java</title>
	<atom:link href="http://mikaelb.net/emneord/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikaelb.net</link>
	<description>Bloggen</description>
	<lastBuildDate>Mon, 07 Sep 2009 20:11:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Bitwise operasjoner</title>
		<link>http://mikaelb.net/2008/12/bitwise-operasjoner/</link>
		<comments>http://mikaelb.net/2008/12/bitwise-operasjoner/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 00:31:20 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Datateknikk]]></category>
		<category><![CDATA[Høynivåspråk]]></category>
		<category><![CDATA[bits]]></category>
		<category><![CDATA[byte]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[prosessor]]></category>

		<guid isPermaLink="false">http://mikaelb.net/?p=58</guid>
		<description><![CDATA[I feiringen av fullført datateknikk eksamen, skal jeg nå sette kunnskapene mine på en siste prøve. Jeg skal nå skriv en artikkel om bitwise-operasjoner som en gjerne bruker med et høynivåspråk som f.eks Java eller C++. Før, på en tradisjonell prosessor, ble bitwise-operasjoner gjerne brukt av en CPU i steden for addisjoner og substraksjoner. Dette [...]]]></description>
			<content:encoded><![CDATA[<p>I feiringen av fullført datateknikk eksamen, skal jeg nå sette kunnskapene mine på en siste prøve. Jeg skal nå skriv en artikkel om bitwise-operasjoner som en gjerne bruker med et høynivåspråk som f.eks Java eller C++. Før, på en tradisjonell prosessor, ble bitwise-operasjoner gjerne brukt av en CPU i steden for addisjoner og substraksjoner. Dette er som regel ikke tilfellet nå i en CPUs mer moderne form, nå som addisjon og substraksjon er like rask som bitwise-operasjoner. </p>
<p>Først litt om hva en bit og en byte er. En bit er et siffer i en binær sammenheng. Et binært tallsystem (også kjent som 2-tallsystemet) er det som blir brukt internt av en datamaskin og all data og innhold i en maskin brytes ned til binære mønster for maskinen. Her er det kun 0 og 1 (høy spenning eller lav spenning) som duger.</p>
<p>Jeg nevnte at bit var et siffer i et binært mønster. En byte (som dere kanskje kjenner igjen som en størrelsesenhet på maskinen) er en samling av slike bits. 8 bits for å være helt nøyaktig. I en byte er derfor maksimalverdien 255 i ti-tallsystemet (1111 1111 i to-tallsystemet).</p>
<p>Et ord derimot er en samling av bits uten en fast størrelse. Ord er et bitmønster i en lokasjon/linje i et minne. Et ord kan derfor være på f.eks 16 bit, 32 bit, 64 bit.</p>
<h2>Bitwise-operasjoner</h2>
<p>Vi har 6 forskjellige bitwise-operasjoner.</p>
<ol>
<li><strong>AND</strong> &#8211; &amp;</li>
<li><strong>OR</strong> &#8211; |</li>
<li><strong>XOR</strong> &#8211; ^</li>
<li><strong>NOT</strong> &#8211; ~</li>
<li><strong>RIGHT SHIFT</strong> &#8211; &gt;&gt;</li>
<li><strong>LEFT SHIFT</strong> &#8211; &lt;&lt;<em></em></li>
</ol>
<p><em>(Det du ser til høyre, etter -, er tegnene som blir brukt i høynivåspråk for disse operasjonene.)</em></p>
<h2>AND</h2>
<p>AND blir brukt til å se hvilke bits som korresponderer i et bitmønster. Her tar jeg utgangspunkt i et mønster på lengden 8 bits, altså en byte. </p>
<p>Her tar jeg utgangspunkt i tallene 133 og 203. 133 er 1000 0101 og 203 er 1100 1011.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #666666; font-style: italic;">// 1000 0101 &amp; 1100 1011</span>
   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span>
   <span style="color: #cc66cc;">1100</span> <span style="color: #cc66cc;">1011</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0001</span></pre></div></div>

<p>Som du ser resulterer det i et bitmønster som har 1 hvor det er 1 på begge bytene og 0 hvor det er ulikt eller likt på 0. </p>
<p>Dette kan du f.eks bruke til å finne om en gitt bit er satt eller ikke:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Denne returnerer 0 (boolsk verdi: false) da bitverdien for 2 ikke er satt.</span>
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span> 0x02<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h2>OR</h2>
<p>OR blir brukt til å se hvilke to bits sammenlagt har 1. Dvs dersom en av bitene på to bitmønster har 1 vil resultatet si 1. </p>
<p>Jeg tar igjen utgangspunkt i samme tall som på AND.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #666666; font-style: italic;">// 1000 0101 | 1100 1011</span>
   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span>
   <span style="color: #cc66cc;">1100</span> <span style="color: #cc66cc;">1011</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #cc66cc;">1100</span> <span style="color: #cc66cc;">1111</span></pre></div></div>

<p>Som du ser blir det 1 hvor en av bitmønstrene har 1 i seg på den plassen.</p>
<h2>XOR</h2>
<p>Denne operasjonen er en &#8220;enten eller&#8221; operasjon. Den blir 1 hvis og bare hvis de to bitene er ulike. </p>
<p>Tar fortsatt utgangspunkt i samme tall.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #666666; font-style: italic;">// 1000 0101 ^ 1100 1011</span>
   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span>
   <span style="color: #cc66cc;">1100</span> <span style="color: #cc66cc;">1011</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #208080;">0100</span> <span style="color: #cc66cc;">1110</span></pre></div></div>

<h2>NOT</h2>
<p>NOT-operasjonen er en måte å finne det motsatte på. Eller du kan gjerne si at du vil finne negasjonen av mønsteret.</p>
<p>Tar fortsatt utgangspunkt i samme tall som før. </p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   ~<span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #208080;">0111</span> <span style="color: #cc66cc;">1010</span></pre></div></div>

<h2>LEFT SHIFT</h2>
<p>LEFT SHIFT-operasjonen flytter alle bit-verdiene ett hakk til venstre dersom noe annet ikke er gitt. Kan også flytte flere hakk til venstre dersom nødvendig.</p>
<p>Tar utgangspunkt i det første tallet gitt fra AND-operasjonen. </p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span> <span style="color: #339933;">&lt;&lt;</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #208080;">0000</span> <span style="color: #cc66cc;">1010</span>
&nbsp;
   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">2</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #208080;">0001</span> <span style="color: #208080;">0100</span></pre></div></div>

<h2>RIGHT SHIFT</h2>
<p>Samme som forrige operasjon, bare motsatt vei. Altså til høyre.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span> <span style="color: #339933;">&gt;&gt;</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #208080;">0100</span> <span style="color: #208080;">0010</span>
&nbsp;
   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #cc66cc;">2</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #208080;">0010</span> <span style="color: #208080;">0001</span></pre></div></div>

<h2>Noen ord til slutt</h2>
<p>Håper dette skriveriet kan hjelpe noen til å forstå hvordan man skal bruke bitwise-operasjoner. I alle fall hvordan de fungerer. Disse operasjonene har mange forskjellige bruksområder. For eksempel kan &#8220;shifting&#8221; brukes til å finne den mest signifikante biten i et mønster og således finne ut om verdien er negativ eller positiv. NOT kan f.eks brukes til å finne absoluttverdien av et negativt tall osv.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2008/12/bitwise-operasjoner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
