---
title: "Kan man kolla om en viss bit är satt?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/92369-kan-man-kolla-om-en-viss-bit-är-satt"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "aasah"
published: "2003-12-10T20:14:50.000Z"
updated: "2003-12-14T22:46:25.000Z"
replies: 9
views: 384
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/92369-kan-man-kolla-om-en-viss-bit-är-satt"
---

# Kan man kolla om en viss bit är satt?

## #1 — aasah, 2003-12-10T20:14Z

Sökte, men angav kanske fel sökord, för jag fick inget napp.

Mitt problem: Jag har variabeln $i som jag VET håller i en integer s.a. 
0 \<= $i \<= 15. Det skulle vara trevligt om det fanns ett sätt att kolla vilka bitar i talet som är satta. 

Alltså ex: $i = 7 ==\> binärt 0111. Finns det någon funktion f som:
f($i, 0) ==\> 1, f($i, 1) ==\> 1, f($i, 2) ==\> 1, f($i, 3) ==\> 0

Eller hur löser man det? Om det överhuvudtaget går att göra tjusigare än att kolla om den är udda och dividera med 2 successivt...

Tacksam för svar! :)

Permalänk: https://www.webforum.nu/p/92369

## #2 — SPiN, 2003-12-10T20:48Z

Tja, det kan man ju alltid knåpa ihop annars för jag tror inte att det finns:

```
function f( $myInt, $pos ) {
     if( !is_integer( $myInt ) && is_numeric( $myInt ) )
          $myInt = ( int ) $myInt;     

     if( is_integer( $myInt ) ) {
          $binArray = decbin( myInt );
          return $binArray[ $pos ];
     } else {
          return false;
     }
}
```

Lite enkelt gjort. Självklart kan man göra funktionen mer komplex och användbar, men det orkade jag inte just nu - det är ju fotboll på TV. Säg till om du vill ha mer vägledning.

Permalänk: https://www.webforum.nu/p/1223817

## #3 — spango, 2003-12-10T21:27Z

Re: Kan man kolla om en viss bit är satt?

> **aasah skrev:**
>
> Alltså ex: $i = 7 ==\> binärt 0111. Finns det någon funktion f som:
> f($i, 0) ==\> 1, f($i, 1) ==\> 1, f($i, 2) ==\> 1, f($i, 3) ==\> 0
> 
> Eller hur löser man det? Om det överhuvudtaget går att göra tjusigare än att kolla om den är udda och dividera med 2 successivt...

Mums, bitmanipulering! Det ballaste som finns!  :D 
För att kolla vilka bitar som är satta använder du vänsterskift och bitvis AND, och så utnyttjar du det faktum att 1 är binärt 00000001 (om man har en unsigned byte... bla bla bla...). Exempelvis, vill du kolla om den tredje biten från vänster är satt, gör du så här:

```php
if ($integern & (1 << 3)) {
    // biten är på
}
```

Permalänk: https://www.webforum.nu/p/1223861

## #4 — SPiN, 2003-12-10T21:43Z

Gha, så klart. :e

Permalänk: https://www.webforum.nu/p/1223871

## #5 — GrodanBoll, 2003-12-11T13:01Z

Re: Kan man kolla om en viss bit är satt?

> **aasah skrev:**
>
> ett sätt att kolla vilka bitar i talet som är satta

Kanske en dum fråga men varför vill man veta det?
E det en dum och okunnig fråga så e det en kompis som vill veta och inte jag.  :r

Permalänk: https://www.webforum.nu/p/1224128

## #6 — spango, 2003-12-11T14:39Z

Därför att man då kan klämma in en massa information i en och samma variabel. Tänk dig att du vill ha en klass som motsvarar en font, som du kan välja om den ska vara över-, genom-, och understruken samt fet och/eller kursiv stil. Då definierar man bitmönster för varje alternativ och låter tillämpningsprogrammerarna slå ihop olika bitmönster med \| (bitvis OR), och så behöver man bara ett argument till funktionen/klassen.

Permalänk: https://www.webforum.nu/p/1227113

## #7 — GrodanBoll, 2003-12-11T14:48Z

Men tjena, det verkar ju vara riktigt najs.
Tackar för svaret.  :bire 

Finns det någon som håller i en artikel/information i ämnet så får jättegärna länken postas här. :)

Permalänk: https://www.webforum.nu/p/1227115

## #8 — spango, 2003-12-11T15:15Z

Det är ganska enkelt. Kika på koden på <http://www.zend.com/codex.php?id=99&single=1>

Permalänk: https://www.webforum.nu/p/1227138

## #9 — aasah, 2003-12-11T16:17Z

Re: Re: Kan man kolla om en viss bit är satt?

Tusen tack för svaret, spango! :D Smart! :D

Men...

> **spango skrev:**
>
> ... Exempelvis, vill du kolla om den tredje biten från vänster är satt, gör du så här:
>
>
> ```php
> if ($integern & (1 << 3)) {
>     // biten är på
> }
> ```

... detta ger faktiskt fjärde biten från vänster. Eftersom första biten ges av *$integern & 1*, andra ges av  *$integern & (1 \<\< 1)*, ....

Permalänk: https://www.webforum.nu/p/1227180

## #10 — spango, 2003-12-14T22:46Z

D'oh! :o Såklart.

Permalänk: https://www.webforum.nu/p/1228910

---

Tråden på webben: https://www.webforum.nu/amne/php/92369-kan-man-kolla-om-en-viss-bit-är-satt
