webForumDet fria alternativet

<< & >>

C/C++

12 svar · 452 visningar · startad av Alpha II

Medlem sedan maj 20002 993 inlägg
Frågan#1

Vad betyder << och >>?

    mask = 2 << (x & 0x7);
    col = x >> 3;
Medlem sedan apr. 20003 971 inlägg
#2

<< skiftar åt vänster och >> åt höger.
Skiftning innebär att man flyttar alla bitar i ett tal åt höger eller vänster. En skiftning åt vänster en gång innebär att talet dubbleras. En skiftning åt höger en gång innebär att talet halveras.

tal << 1 får samma resultat som tal * 2.
tal >> 3 får samma resultat som tal / 8.

Förstår du? :)

Medlem sedan maj 20002 993 inlägg
#3

varför blir tal >> 3 lika som tal \ 8?

Medlem sedan maj 20002 993 inlägg
#4

Vad blir tal >> 4 lika som då? /10? :o

Medlem sedan apr. 20003 971 inlägg
#5

Ursprungligen av Alpha II Vad blir tal >> 4 lika som då? /10? :o

Nej, 16.

>>1 = / 2
>>2 = / 4
>>3 = / 8
>>4 = / 16

Vad som händer är att bitarna förflyttar sig.

Exempel:
11100011
>> 1
01110001 (1 faller bort)

Här förflyttar sig alla bitar i byten åt höger en gång. Biten längst åt höger faller bort.

En skiftning åt vänster ser istället ut så här.
11100011
<< 1
11000110

Nu faller biten längst till vänster bort. En nollbit kommer in från höger och fyller tomrummet.

Medlem sedan juni 200010 432 inlägg
#6

Alpha II ->

how come?
Basen 2 kanske? ;)

48 >>4:

110000 = 1*2^5+1*2^4+0*2^3+0*2^2+0*2^1+0*2^0 = 48
011000 = 0*2^5+1*2^4+1*2^3+0*2^2+0*2^1+0*2^0 = 24
001100 = 0*2^5+0*2^4+1*2^3+1*2^2+0*2^1+0*2^0 = 12
000110 = 0*2^5+0*2^4+0*2^3+1*2^2+1*2^1+0*2^0 = 6
000011 = 0*2^5+0*2^4+0*2^3+0*2^2+1*2^1+1*2^0 = 3
Medlem sedan okt. 20013 217 inlägg
#7

Hur funkar det på en CPU som har Intel-arkitektur då den har omvänd byteordning jämfört med t ex Motorola ? Är detta nått som kompilatorn kommer att ta hänsyn till och "fixa till det bakom kulisserna" ?

Medlem sedan juni 200010 432 inlägg
#8

Intressant fråga. :)

Är det en strikt bitmanipulation mot maskinkod, eller är det bitmanipulation på en högre (kompilator)nivå :q

Det händer ju att man måste konvertera det ena formatet till det andra m.m.. och då brukar man använda bitoperatorn ihop med en buffert för konverteringen.

Medlem sedan feb. 20002 300 inlägg
#9

Ja, det "fixar till sig".. :h

http://www.visualcoders.com/software/guides/bitwise-redfiter.shtml

Medlem sedan juni 200010 432 inlägg
#10

Fixar till sig?

It must be noted, however, that neither system is better than the other in this respect, but it is very important to be aware of the byte order of the system you are working with, especially when you are doing bitwise operations

Mao bör man vara medveten om vad systemet har för byteordning när man ska utföra en bitoperation :bire

Medlem sedan feb. 20002 300 inlägg
#11

Du har givetvis rätt PeW!

Läste inte tillräckligt noggrant... :r

Fast jag hittade en länk iaf... :e

Medlem sedan juni 200010 432 inlägg
#12

Du har givetvis rätt PeW!

Weeeeee! :birp

;)

Medlem sedan okt. 20013 217 inlägg
#13

Slutsatsen är alltså att man ska vara lite försiktig med >> och << om man inte vet vilket CPU koden kommer att snurra på. :-)

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)