সি তে স্বাক্ষরিত পূর্ণসংখ্যার সংখ্যা উপস্থাপন করে। যদি a
এবং b
স্বাক্ষরিত পূর্ণসংখ্যার ধরণের পরিবর্তক হয় তবে স্ট্যান্ডার্ডটির জন্য কখনই কোনও সংকলককে তাদের নিজ নিজ মানগুলির পাটিগণিত যোগ ছাড়া অন্য কোনও কিছুতে অভিব্যক্তি a+=b
সঞ্চয় করার প্রয়োজন হয় না a
। যদি গাণিতিক সমষ্টি মধ্যে মাপসই করা হবে না এটা ঠিক যে, a
, প্রসেসর পারে এটিকে সেখানে রাখা করতে সক্ষম নাও হতে কিন্তু মান আরোপ করার কম্পাইলার প্রয়োজন হয় না হবে বা মূল্য মোড়ানো, অথবা মান যে অতিক্রম করে যে বিষয়টি জন্য অন্য কিছু করতে তাদের ধরণের সীমাবদ্ধতা। মনে রাখবেন যে স্ট্যান্ডার্ডটির এটির প্রয়োজন নেই, সি প্রয়োগকারীদের স্বাক্ষরিত মান সহ পাটিগণিতের ওভারফ্লোগুলিকে ফাঁদে ফেলার অনুমতি দেওয়া হয়েছে।
সি-তে স্বাক্ষরযুক্ত পূর্ণসংখ্যাগুলি পূর্ণসংখ্যার বিমূর্ত বীজগণিত রিং হিসাবে আচরণ করে যা বৃহত্তর প্রকারের রূপান্তর বা সংক্রমণের সাথে পরিচালিত পরিস্থিতিতে ব্যতীত দু'জনের কিছুটা একত্রিত করে মডুলু হয় some যে কোনও আকারের পূর্ণসংখ্যাকে 32-বিট স্বাক্ষরবিহীন প্রকারে রূপান্তরিত করা হলে সেই সদস্যটির সাথে সম্পর্কিত জিনিসগুলি পাওয়া যাবে যা সেই পূর্ণসংখ্যা মোড 4,294,967,296 এর সাথে সংগতিপূর্ণ। 2 টি ফলন থেকে 4,294,967,295 থেকে 3 বিয়োগ করার কারণটি হ'ল একত্রিত কিছুতে 3 এর সাথে কিছু সংযোজন 4,294,967,295 তে কিছু মিলিয়ে 2 তে কিছু মিলবে।
অ্যাবস্ট্রাক্ট বীজগণিতের রিংগুলির ধরণগুলি প্রায়শই সহজ জিনিসগুলি হ'ল; দুর্ভাগ্যক্রমে, সি কোনও ধরণের রিং হিসাবে আচরণ করা উচিত কিনা তা সিদ্ধান্ত নেওয়ার ফ্যাক্টর হিসাবে স্বাক্ষর ব্যবহার করে। সবচেয়ে খারাপ, স্বাক্ষরযুক্ত মানগুলি বড় আকারে রূপান্তরিত হওয়ার সময় রিং সদস্যের চেয়ে সংখ্যা হিসাবে বিবেচিত হয় এবং int
যখন কোনও গাণিতিক সম্পাদিত হয় তখন সংখ্যায় রূপান্তরিত হওয়ার চেয়ে স্বাক্ষরবিহীন মানগুলি ছোট হয়। যদি v
একটি uint32_t
সমান হয় 4,294,967,294
, তাহলে করা v*=v;
উচিত v=4
। দুর্ভাগ্যক্রমে, যদি int
64 বিট হয়, তবে কী v*=v;
করতে পারে তা বলার অপেক্ষা রাখে না।
স্ট্যান্ডার্ডটি যেমনটি দেওয়া হয় তেমন, আমি এমন পরিস্থিতিতে স্বাক্ষরবিহীন প্রকারের ব্যবহারের পরামর্শ দেব যেখানে কেউ বীজগণিতের রিংগুলির সাথে সম্পর্কিত আচরণ চান এবং যখন কেউ সংখ্যার প্রতিনিধিত্ব করতে চান তখন স্বাক্ষরিত প্রকারগুলি চান। এটি দুর্ভাগ্যজনক যে সি যেভাবে পার্থক্যগুলি এনেছিল, তবে তারা সেগুলি।