این نمونه دستور format چطور کار می کند ؟
String hexColor = String.format("#X", (0xFFFFFF & color));
1 - color متغییر خودمه که یه مقدار int که مربوط به یک رنگه توش ذخیره میشه
خروجی کد hex رنگ int color هستش ! اما چطور کار میکنه ؟
من هنوز جاوا رو خوب یاد نگرفتم. ولی این خط کد ظاهرا دو عمل انجام میده. عمل اول مقایسه رنگ شما با رنگ مرجع که به صورت ffffff مشخص شده. پیشوندشم تبدیلش میکنه به hex. بعد مقایسه به شکل باینری با & باینری انجام میشه. حالا چرا مقایسه میشه، نمیدونم!؟ عمل دوم هم فرمت کردن نتایج به شکل hex هست. حالا شما به حرف من استناد نکنید تا ببینیم بقیه چه پاسخی میدن.
مثلا فرض کن دوتا باینری داریم
01101010 =a
10101000=b
در نتیجه b & a میشه 00101000
یعنی وقتی در دو باینری،اعداد متناظر هر دو 1 باشند حاصلشون میشه 1. در غیر این صورت میشه 0
در عملگر xor یا باید عملوند اول صحیح باشه یا دومی تا جواب true بشه. و اگر هر دو صحیح باشند یا هر دو غلط باشند جواب میشه false . در قیاس باینری عدد 1 یعنی صحیح و صفر یعنی غلط. حالا اگر در & ارقام متناظر هر دو یک باشند جواب حاصل هم 1 میشه. در غیر این صورت میشه صفر.
در مورد نکته دوم که گفتی، فکر میکنم همینطوره؛باید خودکار به باینری تبدیل بشه. چون یکی از عملوند ها عدد صحیح و یکه دیگه هگزه.
در کل ما چیزی به فرمت Binary, Hex و ... نداریم و هیچ چیز تبدیل به چیز دیگری نمیشه. شما وقتی میگید 11111111 در مبانی 2 یعنی همون FF در مبنای هگز یعنی همون 255 در مبنای دسیمال و ... . برای Eclipse یا Compiler فرقی نمی کنه که شما یک عدد رو در فرمت Hex بنویسید یا Bin یا Dec و مهم هست که مقدار اون عدد چیه نه نوع نوشتارش. مثلاً «یک» و «1» هیچ فرقی با هم از نظر ارزش نداره و فقط نوع نوشتنش فرق می کنه.
کلاً جدول زیر رو بدونید:
and or xor
a b a&b a|b a^b
--- --- --- --- ---
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
حالا وقتی دو تا عدد با هم & می شن به سر تک تک بیت های بین اونها این محاسبه انجام می گیره و تک تک بیت های خروجی رو تشکیل می ده. پس مثلاً & شدن یک چیزی مثل 183 دسیمال با 0xFFFFFF میشه:
(183)10 = (10110111)2
(0xFFFFFF)16 = (111111111111111111111111)2
=>
111111111111111111111111 &
000000000000000010110111 =
000000000000000010110111
پس می بینید که حاصل میشه همون مقداری که با 0xFFFFFF اند شده و فرقی نمی کنه. پس لزومی هم نداره که اون عبارت نوشته بشه و این عبارت کافیه:
String hexColor = String.format("#X", color);
در ضمن درستش هم باید باشه:
String hexColor = String.format("%#X", color);
تست کنید و نتیجه رو اطلاع بدید لطفاً.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .