جافا طباعة عدد ثنائي باستخدام بت الحكمة المشغل [مغلقة]
-
03-10-2019 - |
سؤال
مرحبا أنا خلق طريقة التي سوف تتخذ عددا وطباعته جنبا إلى جنب مع تمثيل ثنائي.المشاكل هي أن لي طريقة طباعة كافة 0 لأي رقم موجب ، و كل 1 من أجل أي عدد سالب
private static void display( int number ){
System.out.print(number + "\t");
int mask = 1 << 31;
for(int i=1; i<=32; i++) {
if( (mask & number) != 0 )
System.out.print(1);
else
System.out.print(0);
if( (i % 4) == 0 )
System.out.print(" ");
}
}
حصلت عليه:يعمل هذا:
/**
* prints the 32-bit binary representation of a number
* @param number the number to print
*/
private static void display( int number ){
//display number and a tab
System.out.print(number + "\t");
//shift number 31 bits left
int mask = 1 << 31;
//loop and print either 1 or 0
for(int i=31; i>=0; i--) {
if( ((1 << i)&number) != 0)
System.out.print(1);
else
System.out.print(0);
//every four bits print a space
if( (i % 4) == 0 )
System.out.print(" ");
}
//print new line
System.out.println();
}
المحلول
نسيت أن التحديث القناع:
for(int i=1; i<=32; i++) {
if( (mask & number) != 0 )
System.out.print(1);
else
System.out.print(0);
if( (i % 4) == 0 )
System.out.print(" ");
mask = mask >> 1;
}
نصائح أخرى
نص السؤال تم تحرير مرات عديدة ، لذلك فمن الصعب أن نقول ما هو السؤال, ولكن هنا بعض الملاحظات.
على وقع مقابل غير موقعة التحول
واحد تنقيح السؤال يحتوي على هذا السطر:
int mask = 1 << 31;
إجابة واحدة تشير إلى أن ما كان مفقودا هو هذا السطر:
mask = mask >> 1;
هذا الواقع لن يجدي لأن >>
هو وقع التحول ، ويؤدي إلى غير صحيحة mask
قيمة لهذا الغرض (منذ أفرغت بت مليئة 1
s).أي عدد سالب يمكن تحويلها إلى 32 بت, كل 1
.
ما هو مطلوب هو غير صحيح التحول.
mask >>>= 1;
علما بأن مجمع الإحالة قد استخدمت الإيجاز.غير صحيح التحول >>>
يملأ أفرغت بت مع 0
.كما تستخدم هنا ، فإنه يضمن أن mask
سوف يكون دائما واحدة فقط bit set, وهو ما هو مطلوب لهذه المشكلة.
انظر أيضا
مثل هذا السؤال
- برنامج جافا
- مماثلة الواجب
الحل البديل
هناك في الواقع أبسط حل لتحويل 32 بت int
إلى 32 بت ، فصل في مجموعات من 4 بت.
static String zeroes(int length) {
return (length <= 0) ? ""
: String.format("%0" + length + "d", 0);
}
//...
int num = 8675309;
// convert to binary
String s = Integer.toBinaryString(num);
System.out.println(s);
// prints "100001000101111111101101"
// fill in leading zeroes
s = zeroes(Integer.SIZE - s.length()) + s;
System.out.println(s);
// prints "00000000100001000101111111101101"
s = s.replaceAll("(?!$)(?<=\\G.{4})", " ");
System.out.println("[" + s + "]");
// prints "[0000 0000 1000 0100 0101 1111 1110 1101]"
حتى لو كان هذا هو الواجب ، مجموعة متنوعة من التقنيات المستخدمة هنا يجب أن يكون لا يزال التعليمية.