স্বাক্ষরবিহীন দীর্ঘ জাভা সমতুল্য?


106

সি ++ এ, আমি 64৪ বিট স্বাক্ষরযুক্ত পূর্ণসংখ্য, এর মাধ্যমে unsigned long long intবা মাধ্যমে অ্যাক্সেস পেয়ে উপভোগ করেছি uint64_t। এখন, জাভা দীর্ঘায়িত হয় 64 বিট, আমি জানি। যাইহোক, তারা স্বাক্ষরিত হয়।

জাভা আদিম হিসাবে কি স্বাক্ষরযুক্ত দীর্ঘ (দীর্ঘ) উপলব্ধ? আমি কিভাবে এটা ব্যবহার করব?


4
দ্রষ্টব্য উত্তরটি জাভা 8 এবং তার পরে পুরানো। নতুন বৈশিষ্ট্যটির জন্য গিগাস্টোরের উত্তর দেখুন যেখানে আপনি জাভাকে কোনও সংখ্যা স্বাক্ষরযুক্ত হিসাবে বিবেচনা করতে বলতে পারেন। দৈনন্দিন ব্যবহারের জন্য নয়, যখন আপনার প্রয়োজন হয় তখন সহজ y
তুলসী বাউরক

উত্তর:


55

আমি বিশ্বাস করি না। আপনি একবার স্বাক্ষরিত দীর্ঘের চেয়ে আরও বড়োতে যেতে চাইলে আমার মনে হয় বিগইন্টিজারই একমাত্র উপায় (বাক্সের বাইরে)।


17
এই উত্তরটি একটু পুরানো (এটি ২০০৯ সালে পোস্ট করা হয়েছিল)। জাভা 8 (মার্চ 2014 প্রকাশিত) শুরু করে, স্বাক্ষরবিহীন দীর্ঘের জন্য সমর্থন রয়েছে। আমি উত্তর হিসাবে নীচে পোস্ট একটি উদাহরণ চেক করুন।
আমর

140

জাভা 8 শুরু করে, স্বাক্ষরবিহীন দীর্ঘ (স্বাক্ষরযুক্ত 64 বিট) এর জন্য সমর্থন রয়েছে। আপনি যেভাবে এটি ব্যবহার করতে পারেন তা হ'ল:

Long l1 = Long.parseUnsignedLong("17916881237904312345");

এটি মুদ্রণের জন্য, আপনি কেবল l1 মুদ্রণ করতে পারবেন না, তবে আপনাকে প্রথমে এটি করতে হবে:

String l1Str = Long.toUnsignedString(l1)

তারপর

System.out.println(l1Str);

@ j10, Long ul1 = Long.parseUnsignedLong(objScannerInstance.next("\\d+"));ঠিক মার্জিত নয় কারণ এটিতে একটি পরিসীমা চেকের অভাব রয়েছে তবে এটি আপনাকে দীর্ঘ সংখ্যার ইনপুটগুলিতে টানতে দেয় যা অন্যথায় সম্ভব স্বাক্ষরিত লম্বার পরিসীমা অতিক্রম করতে পারে। (যে Scanner::next(...)কোনও প্যাটার্ন অবজেক্ট বা স্ট্রিং প্যাটার্নকেও গ্রহণ করতে পারে এই সত্যটি উপস্থাপন করে ))
স্প্যান্সার ডি

এটা কঠিন.
Alex78191

12

না, নেই। আপনাকে আদিম longতথ্য প্রকারটি ব্যবহার করতে হবে এবং স্বাক্ষর সংক্রান্ত সমস্যাগুলি মোকাবেলা করতে হবে, বা যেমন একটি শ্রেণি ব্যবহার করতে হবে BigInteger


7

না, নেই। জাভা ডিজাইনাররা রেকর্ডে রয়েছে যে তারা স্বাক্ষরবিহীন ইনট পছন্দ করে না। পরিবর্তে একটি বিগইন্টার ব্যবহার করুন। বিশদ জানতে এই প্রশ্নটি দেখুন ।


22
আমি যা করেছি তার জন্য আমি গোসলিংকে শ্রদ্ধা করি, তবে আমি মনে করি যে কোনও স্বাক্ষরবিহীন ইন্টের বিরুদ্ধে তার প্রতিরক্ষা আমি যে শুনলাম তার মধ্যে সবচেয়ে দু: খের অজুহাত is :-) আমরা জাভাতে স্বাক্ষরবিহীন অন্তর্গঠনের চেয়ে আরও খারাপ জিনিস পেয়েছি ... :-)
ব্রায়ান নোব্লাচ

1
জাভাপলিস 2007 এ গোসলিং একটি উদাহরণ দিয়েছেন যা বিভ্রান্তিকরভাবে স্বাক্ষরযুক্ত ইনটগুলির পক্ষে কাজ করে না। জোশ ব্লচ উল্লেখ করেছিলেন যে এটি সাইন ইনটগুলির পক্ষেও কাজ করে না। নির্বিচারে আকারের পূর্ণসংখ্যা ftw!
টম হাটিন - ২১ শে


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

3
@ পিপি: আমি আশা করি ভাষা ডিজাইনারগণ বীজগণিতের রিংগুলি ("মোড়ানোর পূর্ণসংখ্যার" প্রকারগুলি কী কী) থেকে পৃথক সংখ্যাগুলির গুরুত্বকে স্বীকৃতি জানায়। যে কোনও আকারের নম্বরটি স্পষ্টভাবে যে কোনও আকারের রিংকে রূপান্তর করতে হবে, তবে রিংগুলি কেবল ফাংশনের মাধ্যমে বা স্পষ্টত টাইপকাস্টের মাধ্যমে একই আকারের সংখ্যায় রূপান্তর করতে হবে । সি এর আচরণ, যেখানে স্বাক্ষরবিহীন প্রকারগুলি সাধারণত বীজগণিতের আংটি হিসাবে আচরণ করে তবে কখনও কখনও সংখ্যার মতো আচরণ করে যা সম্ভবত সমস্ত সম্ভাব্য বিশ্বের সবচেয়ে খারাপ; আমি এটিকে এড়াতে চাইলে গসলিংকে দোষ দিতে পারি না, যদিও তিনি এটি করার জন্য সম্পূর্ণ ভুল পন্থা গ্রহণ করেছিলেন।
সুপারক্যাট

6

জাভা 8 স্বাক্ষরবিহীন দীর্ঘ অপারেশনের একটি সেট সরবরাহ করে যা আপনাকে সেই লং ভেরিয়েবলগুলিকে সরাসরি স্বাক্ষরবিহীন দীর্ঘ হিসাবে আচরণ করতে দেয়, এখানে কিছু সাধারণ ব্যবহৃত:

এবং স্বাক্ষরিত এবং স্বাক্ষরযুক্ত স্বাক্ষরের জন্য সংযোজন, বিয়োগফল এবং গুণগুলি একই।


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

4

আপনি যে ক্রিয়াকলাপ সম্পাদন করতে চান তার উপর নির্ভর করে ফলাফলটি অনেকটা একই, স্বাক্ষরিত বা স্বাক্ষরযুক্ত। তবে, আপনি যদি তুচ্ছ অপারেশনগুলি ব্যবহার না করেন তবে আপনি BigInteger ব্যবহার করে শেষ করবেন।


4

স্বাক্ষরবিহীন জন্য দীর্ঘ আপনি ব্যবহার করতে পারেন UnsignedLong থেকে বর্গ পেয়ারা গ্রন্থাগার :

এটি বিভিন্ন ক্রিয়াকলাপ সমর্থন করে:

  • যোগ
  • ঋণচিহ্ন
  • বার
  • গেলিক ভাষার
  • দ্বারা বিভক্ত

এই মুহুর্তে যে জিনিসটি অনুপস্থিত মনে হচ্ছে তারা হলেন বাইট শিফট অপারেটরগুলি। আপনার যদি প্রয়োজন হয় তবে আপনি জাভা থেকে বিগইন্টিজার ব্যবহার করতে পারেন।


3

জাভাতে স্বাক্ষরবিহীন প্রকার নেই। ইতিমধ্যে উল্লিখিত হিসাবে, BigInteger এর ওভারহেড incure বা নেটিভ কোড অ্যাক্সেস করতে JNI ব্যবহার করুন।


15
চরটি একটি স্বাক্ষরযুক্ত 16-বিট মান;)
পিটার লরে

2

Org.apache.axis.tyype প্যাকেজের একটি রয়েছে

স্বাক্ষরবিহীন দীর্ঘ ক্লাস।

মেভেনের জন্য:

<dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>

0

জাভা 8 এর মতো মনে হচ্ছে পুরানো ভাল [স্বাক্ষরিত] লম্বা স্বাক্ষরবিহীন হিসাবে চিকিত্সা করার জন্য কিছু পদ্ধতি লং-এ যুক্ত করা হয়েছে । কাজের মতো মনে হয় তবে কখনও কখনও সাহায্য করতে পারে।

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