অজগরকে বাইনারিতে পূর্ণসংখ্যা রূপান্তর করা


179

কোনও পূর্ণসংখ্যাটিকে বাইনারিতে রূপান্তর করতে, আমি এই কোডটি ব্যবহার করেছি:

>>> bin(6)  
'0b110'

এবং কখন '0 বি' মুছবেন, আমি এটি ব্যবহার করি:

>>> bin(6)[2:]  
'110'

আমি কি যদি আমি দেখাতে চাই কি করতে পারেন 6হিসাবে 00000110পরিবর্তে 110?


উত্তর:


355
>>> '{0:08b}'.format(6)
'00000110'

কেবল বিন্যাসকরণ স্ট্রিংয়ের অংশগুলি ব্যাখ্যা করতে:

  • {} একটি স্ট্রিং মধ্যে একটি ভেরিয়েবল রাখে
  • 0 আর্গুমেন্ট পজিশনে 0 পরিবর্তনশীল গ্রহণ করে
  • :এই ভেরিয়েবলের জন্য ফর্ম্যাটিং বিকল্পগুলি যুক্ত করে (অন্যথায় এটি দশমিক প্রতিনিধিত্ব করবে 6)
  • 08 বামদিকে শূন্য প্যাডযুক্ত আটটি সংখ্যায় ফর্ম্যাট করে
  • b সংখ্যাটিকে তার বাইনারি উপস্থাপনায় রূপান্তর করে

যদি আপনি পাইথন ৩.6 বা তার বেশি সংস্করণ ব্যবহার করেন তবে আপনি এফ-স্ট্রিংগুলিও ব্যবহার করতে পারেন:

>>> f'{6:08b}'
'00000110'

7
প্রথমটির 0অর্থ 0thযুক্তি format। কোলন বিন্যাসকরণের পরে, দ্বিতীয়টির 0অর্থ 8 শূন্যস্থান শূন্যস্থান এবং b
বাইনারিগুলির

@ আইএফ: এছাড়াও, স্ট্যান্ডার্ড ডকুমেন্টেশন ডকস.পিথথন.আর.
লিবারিয়ান

19
এই সঙ্গে সরলীকৃত যাবে format() ফাংশন : format(6, '08b'); ফাংশনটি একটি মান ( {..}স্লট কী ক্ষেত্রে প্রয়োগ করে) এবং একটি ফর্ম্যাটিং স্পেসিফিকেশন ( :বিন্যাসের স্ট্রিংয়ের পরে আপনি যা কিছু রাখবেন) গ্রহণ করে takes
মার্টিজন পিটারস

4
'{0:08b}'.format(-6)-> '-0000110'। আপনি যদি একটি সাইন না চান? struct? -6%256?
n611x007

1
@ একে 47 হ্যাঁ, পাইথুন ২.6 থেকে আপনি বাইনারি আকারে 0 বি বা 0 বি উপসর্গ সহ লিখতে পারেন: 0b00000110
ডেনিস বারমেনকভ

102

অন্য একটি ধারণা:

>>> bin(6)[2:].zfill(8)
'00000110'

স্ট্রিং ইন্টারপোলেশনের মাধ্যমে ছোট উপায় ( পাইথন 3.6+ ):

>>> f'{6:08b}'
'00000110'

7
মনে রাখবেন যে এই সমাধানটি গৃহীত সমস্যার চেয়ে দ্রুত । কোন সমাধানটি আরও স্পষ্ট (বা আমি এটি বলতে সাহস করি, পাইথোনিক) সম্ভবত ব্যক্তিগত স্বাদের বিষয়।
এয়ার

আমি এখনও অজগরত্বের সারাংশ শিখছি, তবে এটি স্পষ্টতই আরও বহুমুখী। আমি প্রথমে গ্রহণযোগ্য সমাধানটি এর মার্জিত ব্যাখ্যা সহ উত্তেজিত হয়ে দেখেছি, তবে উদ্বেগ প্রকাশ পেয়েছি যে পদ্ধতিগুলি করার জন্য বলা অবজেক্টটি একটি নির্দিষ্ট স্ট্রিং হিসাবে অন্তর্নির্মিত সমস্ত স্পেসিফিকেশন সহ লেখা হয়েছিল, কাঙ্ক্ষিত দৈর্ঘ্যের মতো জিনিসগুলিতে ভেরিয়েবলের সম্পৃক্ততা দূর করে বিটস্ট্রিং এর। এটি পুরোপুরি সমাধান করে এবং এত স্বজ্ঞাত (কমপক্ষে পাইথন 2 এর জন্য) যে প্রতিটি চরিত্রকে ব্যাখ্যা করার দরকার নেই!
169

নেতিবাচক পূর্ণসংখ্যার bin(-6)[2:].zfill(8)পাঠ্য হিসাবে কাজ করে না'0000b110'
jlandercy

20

কিছুটা ঘোরানো পদ্ধতি ...

>>> bin8 = lambda x : ''.join(reversed( [str((x >> i) & 1) for i in range(8)] ) )
>>> bin8(6)
'00000110'
>>> bin8(-3)
'11111101'

1
দুর্দান্ত পদ্ধতি। তবে আমি বুঝতে পারি না যে আপনার কোডের এই অংশটি কী করছে: str ((x >> i) & 1)
গ্রেগরি

2
@ গ্রেগরি: এটি ডানদিকে বিটগুলি স্থানান্তর xকরে এবং এটি সহ এ্যান্ডস করে, একসাথে 1কার্যকরভাবে একবারে একটি বিট (0 বা 1) উত্তোলন করে।
usr2564301


10

ইউমিরোর উত্তরটি আরও ভাল, তবে আমি কেবল বিভিন্নতার জন্য এটি পোস্ট করছি:

>>> "%08d" % int(bin(6)[2:])
00000110

3
হেহ। এটি ঠিক এত গভীরভাবে ভুল, আমাকে এটি উড়িয়ে দিতে হয়েছিল। দশমিককে দশমিক হিসাবে ব্যাখ্যা করা ধূর্ততা। আরও খারাপ:'%08x' % int(bin(6)[2:], 16)
ম্যাড পদার্থবিদ

6

.. বা আপনি যদি নিশ্চিত হন না যে এটি সর্বদা 8 সংখ্যার হওয়া উচিত, আপনি এটি প্যারামিটার হিসাবে পাস করতে পারেন:

>>> '%0*d' % (8, int(bin(6)[2:]))
'00000110'

5

numpy.binary_repr(num, width=None) একটি যাদু প্রস্থ আর্গুমেন্ট আছে

উপরের লিঙ্কযুক্ত ডকুমেন্টেশন থেকে সম্পর্কিত উদাহরণগুলি:

>>> np.binary_repr(3, width=4)
'0011'

যখন ইনপুট নম্বরটি নেতিবাচক এবং প্রস্থ নির্দিষ্ট করা হয় তখন দুটির পরিপূরক ফিরে আসে:

>>> np.binary_repr(-3, width=5)
'11101'

4

ওল্ড স্কুল যাওয়া সবসময় কাজ করে

def intoBinary(number):
binarynumber=""
if (number!=0):
    while (number>=1):
        if (number %2==0):
            binarynumber=binarynumber+"0"
            number=number/2
        else:
            binarynumber=binarynumber+"1"
            number=(number-1)/2

else:
    binarynumber="0"

return "".join(reversed(binarynumber))

number=number/2ভাসা দেয়, তাই number=number//2আরও ভাল seams, আমি number=number//2সঙ্গে number//=2এবং b=b+"0"সঙ্গে প্রতিস্থাপন করতে হবেb+="0"
ব্র্যাম্বোর

এছাড়াও, আপনার প্রয়োজনীয় ওপি হিসাবে 0 টি প্যাডিং নেই
ব্র্যাম্বোর

1
('0' * 7 + bin(6)[2:])[-8:]

অথবা

right_side = bin(6)[2:]
'0' * ( 8 - len( right_side )) + right_side

2
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
নিক 3500 0

0

ধরে নিই যে আপনি কোনও চলক থেকে প্রতিনিধিত্ব করতে ব্যবহৃত অঙ্কগুলির সংখ্যাকে পার্স করতে চান যা সর্বদা ধ্রুবক নয়, নম্পি.বাইনারি ব্যবহার করার একটি ভাল উপায় হবে।

আপনি যখন পাওয়ার সেটে বাইনারি প্রয়োগ করেন তখন এটি কার্যকর হতে পারে

import numpy as np
np.binary_repr(6, width=8)

0

সেরা উপায় হ'ল বিন্যাস নির্দিষ্ট করা।

format(a, 'b')

স্ট্রিং ফর্ম্যাটের একটি বাইনারি মান প্রদান করে।

বাইনারি স্ট্রিংটিকে পূর্বে পূর্ণসংখ্যায় রূপান্তর করতে, int () ফাংশনটি ব্যবহার করুন।

int('110', 2)

বাইনারি স্ট্রিংয়ের পূর্ণসংখ্যা মান প্রদান করে।


ব্যবহারকারী যে ফর্ম্যাটটি চেয়েছিলেন সেটি পেতে আরও ভাল ফর্ম্যাট হবে (এ, '08 বি')।
জেডএসজি

0
def int_to_bin(num, fill):
    bin_result = ''

    def int_to_binary(number):
        nonlocal bin_result
        if number > 1:
            int_to_binary(number // 2)
        bin_result = bin_result + str(number % 2)

    int_to_binary(num)
    return bin_result.zfill(fill)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.