Eine Variable mit 4,5,... bit erstellen ?
-
so:
struct bla { char nur4Bits : 4; char nur5Bits : 5; };
-
Anonymer n00b schrieb:
und eine Unterteilung einer großen Variablen in mehrere Bereiche kommt
auch auch Geschwindigkeitsgründen nicht in Frage
bitfield-verarbeitung u.ä geht aber in der regel langsamer als einfach ein 'int' zu nehmen. rechne mit ints und schieb dir zum schluss die bits zusammen wenn du's so brauchst.
@all: ihr habt das 'unsigned' in euren bitfields vergessen
-
Wieso unsigned?
It is implementationdefined whether a plain (neither explicitly signed nor unsigned) char, short, int or long bitfield is signed or unsigned.
Aus dem C++ Standard 9.6.2
-
Danke für die schnellen Antworten

besonderen Dank an Terraner - ich wurde schon stutzig,
dass das struct trotzdem mindestens 4 Byte und bei 65 Bit auf einmal
8 Byte groß ist
-
niemand schrieb:
Wieso unsigned?
It is implementationdefined whether a plain (neither explicitly signed nor unsigned) char, short, int or long bitfield is signed or unsigned.
Aus dem C++ Standard 9.6.2
weil das vor bösen überraschungen schützt
-
@ net
also du meinst das ich ein int nehme und dann mit den
operatoren << und >> die einzelnen Werte "isolieren" ?Die Idee hatte ich auch schon umgesetzt, aber ich hatte mir
gedacht, dass mehrere 4 Bit Variablen schneller wären
-
Anomyner n00b schrieb:
Die Idee hatte ich auch schon umgesetzt, aber ich hatte mir
gedacht, dass mehrere 4 Bit Variablen schneller wärensind sie nicht, es sei denn du hast 'ne cpu mit nur 4 datenleitungen. im normalfall werden immer die opranden am schnellsten verarbeitet, die der datenbusbreite entsprechen.
-
@net
Böse Überraschung? Wenn es so definiert wäre, dass es immer unsigned ist, ok. Wenn Du aber unsigned hinschreibst, kannst Du trotzdem signed bekommen, oder sehe ich das falsch?@Anomyner n00b
Der Compiler macht genau dass, was Du mit << und >> machst. Wer schneller ist, lässt sich nicht so einfach sagen, kannst Du aber nachmessen. Mich würde aber wundern, wenn der Unterschied für eine (normale) Applikation relevant ist.
Am schnellsten ist es übrigens Variablen in der "nativen" Größe der CPU zu nutzen.
-
niemand schrieb:
@net
Böse Überraschung? Wenn es so definiert wäre, dass es immer unsigned ist, ok. Wenn Du aber unsigned hinschreibst, kannst Du trotzdem signed bekommen, oder sehe ich das falsch?ich hab jetzt keinen standard zur hand aber ich versteh das so dass wenn kein 'unsigned' da steht, sich der compiler aussuchen kann wie er's macht. ich denke mal nicht dass der ein unsigned einfach so unterschlagen darf
-
Uups, ich sollte meine Zitate auch richtig lesen. Da steht "neither explicitly signed or unsigned" - habe "either" gedacht.
Du hast wohl recht, würde das (nach richtigem Hinschauen) genauso verstehen. Also unsigned (bzw. signed, wenn man es denn braucht) mitanzugeben ist dann sicherer.