আমি লক্ষ্য করেছি যে আমি 2 << 5
64 পেতে এবং 1000 >> 2
250 পাওয়ার মতো জিনিসগুলি করতে পারি ।
এছাড়াও আমি ব্যবহার করতে পারেন >>
মধ্যে print
:
print >>obj, "Hello world"
এখানে কি হচ্ছে?
আমি লক্ষ্য করেছি যে আমি 2 << 5
64 পেতে এবং 1000 >> 2
250 পাওয়ার মতো জিনিসগুলি করতে পারি ।
এছাড়াও আমি ব্যবহার করতে পারেন >>
মধ্যে print
:
print >>obj, "Hello world"
এখানে কি হচ্ছে?
উত্তর:
আমি মনে করি এটি গুরুত্বপূর্ণ প্রশ্ন এবং এটির এখনও উত্তর দেওয়া হয়নি (ওপি শিফট অপারেটরদের সম্পর্কে ইতিমধ্যে জানে বলে মনে হচ্ছে)। আমাকে উত্তর দেওয়ার চেষ্টা করুন, >> আপনার উদাহরণের অপারেটর দুটি পৃথক উদ্দেশ্যে ব্যবহৃত হয়। সি ++ পদে এই অপারেটরটি ওভারলোড হয়েছে। প্রথম উদাহরণে এটি বিটওয়াইড অপারেটর (বাম শিফট) হিসাবে ব্যবহৃত হয়, যখন দ্বিতীয় দৃশ্যে এটি কেবল আউটপুট পুনঃনির্দেশ হিসাবে ব্যবহৃত হয়। অর্থাত্
2 << 5 # shift to left by 5 bits
2 >> 5 # shift to right by 5 bits
print >> obj, "Hello world" # redirect the output to obj,
with open('foo.txt', 'w') as obj:
print >> obj, "Hello world" # hello world now saved in foo.txt
অজগর 3 এ ফাইলের যুক্তিটি সরাসরি নিম্নরূপ দেওয়া সম্ভব:
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
__rshift__
এবং __lshift__
পদ্ধতিগুলির মাধ্যমে এই অপারেটরদের ওভাররাইড করতে পারেন ।
এগুলি হ'ল বিটওয়াইজ শিফট অপারেটর।
দস্তাবেজগুলি থেকে উদ্ধৃতি দেওয়া :
x << y
x
Y স্থানে বামে স্থানান্তরিত বিটগুলি সহ ফেরত আসে (এবং ডানদিকে নতুন বিটগুলি শূন্য হয়)। এই গুন হিসাবে একই x
দ্বারা 2**y
।
x >> y
বি x
স্থানগুলি দ্বারা y স্থানে ডানদিকে স্থানান্তরিত হয় Return এটি x
দ্বারা বিভাজন হিসাবে একই 2**y
।
print bin(1)
, print bin(1 << 1)
, print bin(17)
, print bin(17 >> 1)
ইত্যাদি। আপনি ব্যাখ্যা ছাড়াই এটি কীভাবে কাজ করে তা দেখতে পারেন।
print >>obj, "Hello world"
2 << 5
এবং 1000 >> 2
¯_ (ツ) _ / ¯
12 << 2
48
12 এর আসল বাইনারি মান হ'ল "1100" যখন আমরা উপরের বিবৃতিটি কার্যকর করি বাম শিফট (2 স্থান বামে স্থানান্তরিত) 48 এর মান বাইনারি হয় "110000" মান প্রদান করে।
48 >> 2
12
48 এর বাইনারি মান হ'ল "110000", উপরের বিবৃতিটি কার্যকর করার পরে ডান শিফট (2 স্থান ডান স্থানান্তরিত) 12 এর বাইনারি মান "111100" মান প্রদান করে।
এগুলি বিট শিফট অপারেটর যা অনেকগুলি মূলধারার প্রোগ্রামিং ভাষায় বিদ্যমান, <<
বাম শিফট এবং >>
ডান শিফট, এগুলি নিম্নলিখিত টেবিল হিসাবে প্রদর্শিত হতে পারে, ধরে নেওয়া যাক একটি পূর্ণসংখ্যা কেবল মেমরিতে 1 বাইট নেয়।
| operate | bit value | octal value | description |
| ------- | --------- | ----------- | -------------------------------------------------------- |
| | 00000100 | 4 | |
| 4 << 2 | 00010000 | 16 | move all bits to left 2 bits, filled with 0 at the right |
| 16 >> 2 | 00000100 | 4 | move all bits to right 2 bits, filled with 0 at the left |
জড়িত অন্য কেসটি print >>obj, "Hello World"
হ'ল পাইথন 2 এর print
বিবৃতিটির জন্য "প্রিন্ট শেভরন" সিনট্যাক্স ( ফাংশনেরfile
আর্গুমেন্ট দ্বারা প্রতিস্থাপন পাইথন 3 এ সরানো হয়েছে )। স্ট্যান্ডার্ড আউটপুটে লেখার পরিবর্তে আউটপুটটি পদ্ধতিতে পাস করা হয় । একটি সাধারণ উদাহরণ হ'ল পদ্ধতিযুক্ত ফাইল বস্তু । আরও সাম্প্রতিক প্রশ্নের উত্তর দেখুন: পাইথনে সাইন-এর চেয়ে দ্বিগুণ ।print()
obj.write()
write()
এগুলি হ'ল শিফট অপারেটররা
x << y বিটগুলি y টি জায়গায় বামে স্থানান্তরিত x (এবং ডানদিকের নতুন বিটগুলি শূন্য হয়) এর সাথে এক্স রিটার্ন করে। এটি 2 ** y দ্বারা x এর গুণক হিসাবে একই।
x >> y বিটগুলি সহ x টি y স্থান দ্বারা ডানদিকে স্থানান্তরিত করে s এটি // 'আইং x বাই 2 ** y এর সমান।
<< Mean any given number will be multiply by 2the power
for exp:- 2<<2=2*2'1=4
6<<2'4=6*2*2*2*2*2=64
আমি পাইথন 2.7 এবং পাইথন 3.8 উভয়টিতে নিম্নলিখিতটি যাচাই করেছি
আমি মুদ্রণ করেছি (100 << 3) 100 বাইনারি রূপান্তর 1100100 দেয়। আমি যা করলাম তা হল আমি প্রথম 3 বিট ফেলে দিয়েছিলাম এবং শেষে '0' মান সহ 3 বিট যুক্ত করেছি। সুতরাং এটির ফলাফল 0100000 হিসাবে হওয়া উচিত, এবং আমি এটিকে দশমিক হিসাবে রূপান্তর করেছি এবং উত্তরটি 32 ছিল।
আমার অবাক হওয়ার জন্য যখন আমি মুদ্রণ কার্যকর করি (100 << 3) উত্তরটি 800 ছিল I কি হচ্ছে তা পরীক্ষা করতে আমি 800 কে বাইনারি রূপান্তরিত করে। এবং এই আমি 1100100000 পেয়েছি।
আপনি যদি দেখতে পান যে পাইথন উত্তরটি কীভাবে 800 ছিল, তারা প্রথম 3 বিট স্থানান্তরিত বা ছাড়েনি তবে তারা শেষ 'বিট'তে' 0 'মান যুক্ত করেছে।
মুদ্রণ হিসাবে (100 >> 3), নিখুঁত কাজ করেছে। আমি ম্যানুয়াল গণনা করেছি এবং অজগর থেকে মুদ্রণের ফলাফল চেক করেছি। এটি সঠিকভাবে কাজ করেছে। সর্বশেষ 3 বিট বাদ দেওয়া হয়েছে এবং প্রথম 3 বিটগুলিতে মান '0' যুক্ত হয়েছে।
দেখে মনে হচ্ছে (100 << 3), বাম শিফট অপারেটরের পাইথনে একটি বাগ রয়েছে।
<<
,>>
,&
,|
,~
, এবং^
না?