שאלה לתותחים כאן - JAVA

GilBates

New member
שאלה לתותחים כאן - JAVA

אני מתכנת בשפת JAVA ורוצה לעבוד עם ביטים אמיתיים. לצורך כך אני רוצה לממש את טיפוס boolean מחדש כך שיתפוס ביט אחד (ולא byte כמו שעכשיו, למיטב ידיעתי). היכן להתחיל?
 

melatonin

New member
הדרך היחידה שאתה יכול לעשות את זה

ותקנו אותי אם אני טועה, היא ע"י כתיבת JVM משלך. כמובן שאז זה יעבוד רק בו ושלא תעבוד לפי הספציפיקציה של סאן. השאלה היא למה לעשות את זה? אם אני לא טועה, גם ב ++C משתנה בוליאני תופס בעצם בית בזכרון, בגלל אילוצי גודל אינטגרלי ושפשוט יותר קל לעבוד איתו.
 

GilBates

New member
משיקולי זכרון כמובן

אם אני רוצה לעבוד עם מערכים גדולים מאוד של ביטים ולא רוצה לשיהרגו לי את ה-HEAP...
 

melatonin

New member
אז אל תעבוד עם בוליאנים

תעבוד עם מערך של בתים, ותתייחס לכל בית כאל שמונה משתנים בוליאנים. זה נראה לי הכי פשוט.
 

Zack DA

New member
לא,

אבל אני לא רואה איך זה מונע ממך להסתכל על איזה ביט שאתה רוצה...
 

orennahum

New member
פתרון אפשרי

אני נתקלתי באותה הבעיה כאשר רציתי לממש קבוצות (sets) גדולות מאד. הפתרון שלי היה בניית class שמיממש מערך של משתנים בוליאנים. כאשר כל byte יצג למעשה 8 משתנים שונים. בעזרת חישוב מתמטי פשוט ניתן לדעת איזה משתנה משוייך לאיזה byte, ובאותו ה-byte איזה bit ספציפי הוא הנדרש. כמובן ש-class כזה הוא שימושי רק כאשר עובדים עם מערכים של משתנים בוליאנים.
 

DadleFish

New member
ואם כבר אתה עושה דבר כזה,

תשתמש ב-DWORD-ים (משתנים שהם 32 ביט), ולא ב-BYTE-ים. זה יהיה פשוט יותר מהיר מבחינת המעבד.
 

DNile

New member
או שפשוט תעבור לC++,

זה בכלל יהיה מהיר יותר למעבד..
 

Zack DA

New member
לא, זה בסדר.... ../images/Emo13.gif

אם כל התוכנית שלו זה משחקי ביטים, באמת עדיף שיעשה את זה ב- CPP. דניאל צודק לחלוטין.
 

untrots

New member
אין שום הבדל

רק שתדעו אין שום הבדל מבחינת עבודה עם ביטים בין java ל-c++. חוץ מהעניין המעצבן שאין unsigned ב-java.
 

Zack DA

New member
יש לך מתודות סטאטיות שעושות

את כל ה- conversions שאתה זקוק להן.
 

DadleFish

New member
כן, אין שום הבדל,

חוץ מזה שאתה לא יכול להתייחס לביטים ישירות ב-JAVA, ואילו ב-++C כן. שום הבדל חוץ מזה
 

Zack DA

New member
למה הכוונה "להתייחס ישירות" ?

בסופו של דבר, האוגרים של המעבד לא עובדים ביחידות של ביט בודד...
 

untrots

New member
הרשה לי לא להסכים, וגם לתת תשובה

טוב, כנראה שאנחנו לא מדברים על אותו סוג של התייחסות. מה שאני מתכוון זה שיש לך טיפוסים שלמים בגודל 8, 16, 32 ו-64 ביטים. יש לך את כל האופרטורים הנחוצים bitwise and, bitwise or, not, shifts, וכו'. מהבחינה הזאת אין שום הבדל, ההתיחסות דומה והתוצאה זהה. תגיד לי אם אתה לא מסכים איתי. ולמה שהבחור אמר: אין שום בעיה לממש buffer של ביטים ב-java בעזרת class שיחזיק מערך של intים. והיעילות תהיה אותו סדר גודל כמו ב-c++. חבל רק שאין operator overloading.
 

Zack DA

New member
זה מצוין שאין operator overloading.

השתמש במנוע החיפוש כדי למצוא את הויכוחים הרלוונטים שהיו כאן...
 

Zack DA

New member
רשמתי לפני ../images/Emo13.gif

הערת אגב שאני לא מסכים איתה....
 
למעלה