
15-12-2009, 12:01
|
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,778
|
|
האמת שאני לא ממש מומחה בפרל, אבל מצאתי דוגמא בגוגל שבה היה כתוב הפורמט הזה.
חיפוש נוסף מראה שפרל בכלל לא מכירה את הקונספט של true ו false (איזו שפה הזוייה...) , לפחות בגירסא 5. מוזר.
פתרון אחר שחשבתי עליו עכשיו, אם אין משתנה קטן כזה, הוא להשתמש במטריצת ביטים. מה זה אומר - לקחת משתנה שהוא נניח 16 ביט, ולנצל את המשתנה הבודד הזה, לאחסון של 16 אפשרויות בוליאניות (או בינאריות בלשונך). איך עושים את זה? על כל בדיקה בוליאנית שתוצאתה "נכון", עושים OR לוגי למזהה הביט הרלוונטי על ידי הוספת החזקה המתאימה של 2:
עבור הביט הראשון (המשתנה הבינארי הראשון שלנו, לצורך העניין), 2 בחזקת 0 שווה 1
עבור הביט השני (המשתנה הבינארי השני שלנו, לצורך העניין), 2 בחזקת 1 שווה 2
עבור הביט השלישי (המשתנה הבינארי השלישי שלנו, לצורך העניין), 2 בחזקה 2 שווה 4
כך שאם למשל המידע הראשון והשלישי שלנו חיוביים, נעשה על משתנה המטריצה OR לוגי עם 1 ו 4 (כל אחד בתורו), מה שידליק את הביטים הראשון והשלישי (ואם נדפיס את המשתנה, נראה 5, כי 5 בבינארי, זה ... 101).
דוגמא:
קוד:
my $bitmarix;
$bitmatrix = $bitmatrix | 1;
$bitmatrix = $bitmatrix | 4;
וכדי לשלוף תכנותית ביט מסויים מהמשתנה שלנו, עושים AND לוגי של הנתון שאנחנו מחפשים (למשל - 4) מול המשתנה שמכיל את הביטים. אם הנתון היה 0, פעולת ה AND תחזיר 0. אם הוא היה 1, היא תחזיר מספר כלשהוא שונה מ 0, וכך אפשר לדעת, עם if פשוט.
דוגמא, אם אני רוצה לדעת אם הביט השלישי חיובי:
קוד:
if (($bitmatrix & 4) > 0) { printf("Bit 3 is, indeed, true!\n"); }
מקווה שזה עוזר...
|