PDA

View Full Version : سوال: فرمول تبدیل نوع int به byte



svmone
پنج شنبه 03 دی 1394, 11:41 صبح
سلام



وقتی که میخوایم یک نوع int رو به byte تبدیل کنیم از تبدیل صریح استفاده میکنیم (casting) اگر مقدار متغیری که از نوع int تعریف کردیم بزرگتر مساوی -128 تا کوچکتر مساوی 127 باشه همین مقدار تعریف شده به متغیر نوع byte انتساب داده میشه، اما اگر متغیر از نوع int مقدارش خارج از این محدوده باشه مقداری که به byte اختصاص داده میشه متفاوت از مقداری هستش که در نوع int هستش میخواستم بدونم با چه فرمولی این مقدار بدست میاد.

مثال:

// تعریف یک متغیر از نوع صحیح و مقدار دهی آن
int i = 3000;

// تعریف یک متغیر از نوع بایت و تبدیل صریح
// متغیر(i) به نوع بایت
byte b = (byte)i;

System.out.println(b); // output : -72

از چه فرمولی استفاده شده که 3000 تبدیل به -72 شده؟

با تشکر

vahid-p
پنج شنبه 03 دی 1394, 12:51 عصر
عدد 3000 در مبنای 2 میشه : 0000101110111000
خب حالا 8 بیت کم ارزشش رو میگیریم: 10111000
خب چون با ارزشترین بیتش 1 هست پس یک عدد منفی هست و اگر مکمل 2 اش رو حساب کنیم میشه 01001000 که معادل 72 است. پس عددمون -72 بوده.

casting از int به byte، از نوع lossy casting هست یعنی اطلاعات رو از دست میده.

svmone
پنج شنبه 03 دی 1394, 13:12 عصر
سلام
خیلی ممنون بسیار عالی بود، اعداد دیگری هم امتحان کردم و پاسخ شما کاملا صحیحه من به خاطر پاسخ شما و بزرگی شما تنها کاری که می تونم انجام بدم استفاده از دکمه تشکره :خجالت: و کار دیگری از دستم بر نمیاد امیدوارم کمکاری بنده را به بزرگی خودتان ببخشید.

svmone
پنج شنبه 03 دی 1394, 17:32 عصر
یه نکته ای هم در مورد اعداد مثبت است گفتم بگم

عدد 10 رو در مبنای 2 نظر بگیرید: 00001010_00000000_00000000_00000000
8 بیت کم ارزشش میشه: 00001010

با ارزش ترین بیتش 0 است در این صورت هیچ محاسبه ای صورت نمیگیره و همون 10 به متغیر byte نسبت داده میشه، در غیر اینصورت اگر با ارزشترین بیتش 1 باشه بهترین روش استفاده از روش آقای vahid-p هستش.