نمایش نتایج 1 تا 14 از 14

نام تاپیک: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

  1. #1

    رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    سلام دوستان

    دارم اسمبلی رو شروع میکنم که گفته در یک بایت علامت دار ما میتونیم

    از 128- تا 127 رو قرار بدیم.......

    به نظر من قرار دادن عدد 128- در یک بایت غیر ممکنه به دلیل زیر:

    ما برای نمایش عدد باینری 128 به 8 بیت نیاز داریم و برای علامت اون هم 1 بیت

    که در کل میشه 9 بیت که در این صورت این عدد در دو بایت ذخیره میشه که مکمل 2

    این عدد به صورت زیر هست:

    1111111110000000


    که این عدد در 2 بایت ذخیره میشه .

    پس نتیجه میگیریم یک بایت علامت دار میتونه از 127- تا 127 رو در خودش ذخیره کنه....

    هر کسی نظری مخالف با این نظریه من داره لطفا بیان کنه تا اگر اشتباه میکنم بهش پی ببرم

  2. #2
    کاربر دائمی آواتار hoax3r
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    171

    نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    سلام

    تا جایی که من اطلاع دارم مطلبی که گفتین اشتباه هست. بیت علامت همیشه آخرین بیت عدد هست
    به این معنی که اگر عدد 1 بایتی هست نباید اون بیت رو جدا در نظر بگیرین که در عدد تبدیل به 9 بیت بشه

    عدد 128- در مبنای دو این میشه:

    10000000

  3. #3

    نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    نقل قول نوشته شده توسط hoax3r مشاهده تاپیک
    سلام

    تا جایی که من اطلاع دارم مطلبی که گفتین اشتباه هست. بیت علامت همیشه آخرین بیت عدد هست
    به این معنی که اگر عدد 1 بایتی هست نباید اون بیت رو جدا در نظر بگیرین که در عدد تبدیل به 9 بیت بشه

    عدد 128- در مبنای دو این میشه:

    10000000
    کاملا بی اساس هست این حرف شما

    طبق گفته ی شما پس عدد باینری زیر :

    11111111
    برابر با 255- هست, که این کاملا بی اساس هست...

    توصیه میکنم به مطالبم در پست اول و نمایش اعداد منفی در مکمل 2 مطالعه کنید.

  4. #4
    کاربر دائمی آواتار linux
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    2,313

    نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    نقل قول نوشته شده توسط ...StacK... مشاهده تاپیک
    کاملا بی اساس هست این حرف شما

    طبق گفته ی شما پس عدد باینری زیر :

    11111111
    برابر با 255- هست, که این کاملا بی اساس هست...

    توصیه میکنم به مطالبم در پست اول و نمایش اعداد منفی در مکمل 2 مطالعه کنید.
    :) البته مونده تا کی اساس را معین کند.
    در یک بایت علامت دار ، بیت 8 نشان علامت هست.
    یعنی
    1111 1111 = -127 هست نه -255 و 0000 1000 برابر -128 هست.
    128 را در یک بایت علامت دار نمیشه نشوند داد باید دوتا بایت گرفت.
    پس عدد 128 علامت دار بصورت زیر نمایش داده خواهد شد.
    بایت اول بایت دوم
    ------------ -----------
    0000 1000 0000 0000

    زحمت می کشی و می خوانی خوب با دقت بخوان.

  5. #5

    نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    نقل قول نوشته شده توسط linux مشاهده تاپیک
    :) البته مونده تا کی اساس را معین کند.
    در یک بایت علامت دار ، بیت 8 نشان علامت هست.
    یعنی
    1111 1111 = -127 هست نه -255 و 0000 1000 برابر -128 هست.
    128 را در یک بایت علامت دار نمیشه نشوند داد باید دوتا بایت گرفت.
    پس عدد 128 علامت دار بصورت زیر نمایش داده خواهد شد.
    بایت اول بایت دوم
    ------------ -----------
    0000 1000 0000 0000

    زحمت می کشی و می خوانی خوب با دقت بخوان.
    1111 1111 = -127 هست نه -255
    من هم نگفتم 255-

    اگر دقت میکردید گفتم اونجوری که اون دوست عزیزمون گفتنند میشه 255- و من این

    مورد رو تایید نکردم .با این حال باعث سو استفاده شما شد.

    و در اصل برابر با 255 هست نه 127- ....

    عدد 127- برابر با 10000001 هست.

    سیستم اعداد منفی رو در مکمل 2 میگم و الا دیگه اعداد منفی معنایی نداشت

    وقتی شما عدد 10000001 رو برگشت بدید میشه 01111111 که برابر با 127 هست و

    وقتی به مکمل 2 میره میشه 127-

    ولی وقتی 128 به مکمل 2 میره تا بشه 128- در یک بایت جا نمیگیره که این موضوع رو

    در پست اولم توضیح دادم.

    و 0000 1000 برابر -128 هست.
    0000 1000 برابر با 128 هست , نه 128-


    پس عدد 128 علامت دار بصورت زیر نمایش داده خواهد شد.
    بایت اول بایت دوم
    ------------ -----------
    0000 1000 0000 0000
    من حرفی از عدد 128 علامت دار نزدم. !!!

    در واقع ما عددی به نام عدد 128 علامت دار نداریم ...بهتره بگید عدد 128 در بایت علامت دار.

    برای نمایش اعداد منفی ما باید اونا رو به مکمل 2 اونا تبدیل کنیم و وقتی عدد 128

    را به مکمل 2 تبدیل میکنیم به 9 بیت نیاز خواهیم داشت که در واقع این عدد در 2 بایت

    جا میگیره.

    مکمل 2 عدد 128 که میشه 128- به صورت زیر هست:

    1111111110000000


    حالا وقتی شما این عدد رو برگشت بدید میشه

    10000000 که برابر با 128 هست.



    پس زیاد هم فرقی نمیکنه که کی اساس رو معین کنه.
    آخرین ویرایش به وسیله ...StacK... : چهارشنبه 16 بهمن 1387 در 23:42 عصر

  6. #6
    کاربر دائمی آواتار hoax3r
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    171

    نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    خوب حرف من بی اساس است این جمله ای هست که از مستندات اینتل برداشتم ببینید اینم بی اساس است؟

    Software Developer's Manual Volume 1 Basic Architecture

    4.2.1.2 Signed Integers

    Signed integers are signed binary numbers held in a byte, word, doubleword, or
    quadword. All operations on signed integers assume a two's complement representation.
    The sign bit is located in bit 7 in a byte integer, bit 15 in a word integer, bit 31 in
    a doubleword integer, and bit 63 in a quadword integer

    The sign bit is set for negative integers and cleared for positive integers and zero.
    Integer values range from –128 to +127 for a byte integer, from –32,768 to +32,767
    for a word integer, from –231 to +231 – 1 for a doubleword integer, and from –263 to
    +263 – 1 for a quadword integer.


    میبینید در واقع حرف شما هم تا حدودی درست است اگر مساله رو به این صورت ببینیم

    وقتی عدد رو 1 بایت در نظر بگیریم عدد 128- میشه

    10000000


    اگر عدد 2 بایت باشد :

    1111111110000000


    اگر 4 بایت باشد :

    11111111111111111111111110000000


    --------

    در ضمن 11111111 هم میشه 1-
    آخرین ویرایش به وسیله hoax3r : چهارشنبه 16 بهمن 1387 در 23:56 عصر

  7. #7

    نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    در ضمن 11111111 هم میشه 1-
    در یک بایت علامت دار و 255 در یک بایت بدون علامت.(درسته)

    ========================================

    من قبول دارم 127- در یک بایت جا میشه. چرا؟ چون وقتی 127 رو مکمل 2 میکنیم در 8 بیت جا میشه

    و اون 8 بیت که مکمل 2 شده و در یک بایت علامت دار جا شده حکم عدد دسیمال 127- را داره.

    ولی میگم 128- جا نمیشه ؟چرا ؟چون مکمل 2 عدد 128 در یک بایت جا نمیگیره؟؟؟

    اگر اینجور باشه....پس 255- منفی هم در یک بایت جا میگیره .

    من از شما میخوام این مسئله رو شرح بدید.

  8. #8
    کاربر دائمی آواتار hoax3r
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    171

    نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    در یک بایت علامت دار و 255 در یک بایت بدون علامت.(درسته)
    بله، درسته

    من قبول دارم 127- در یک بایت جا میشه. چرا؟ چون وقتی 127 رو مکمل 2 میکنیم در 8 بیت جا میشه

    و اون 8 بیت که مکمل 2 شده و در یک بایت علامت دار جا شده حکم عدد دسیمال 127- را داره.

    ولی میگم 128- جا نمیشه ؟چرا ؟چون مکمل 2 عدد 128 در یک بایت جا نمیگیره؟؟؟

    اگر اینجور باشه....پس 255- منفی هم در یک بایت جا میگیره .

    من از شما میخوام این مسئله رو شرح بدید.
    اول یک سوال می پرسم به نظرت چرا در اعداد یک بایتی و در اون بازه نمیتونی 128 مثبت داشته باشی؟

    من الان مکمل دو عدد 128 رو اینجا حساب میکنم، که دقیقا در یک بایت جا گرفت

    +128 : 10000000
    reverse : 01111111
    + 1 : 10000000


    128+ = 128- جالبه نه!

    من فکر میکنم در دستی حساب کردنش مشکل داشته باشین وگرنه چیز خیلی پیچیده ای نیست

  9. #9
    کاربر دائمی آواتار shask00l
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    روی پاهای خودم
    سن
    38
    پست
    387

    Question نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    نقل قول نوشته شده توسط ...StacK... مشاهده تاپیک
    دارم اسمبلی رو شروع میکنم که گفته در یک بایت علامت دار ما میتونیم
    چه کسی گفته ؟

  10. #10

    نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    نقل قول نوشته شده توسط hoax3r مشاهده تاپیک
    بله، درسته



    اول یک سوال می پرسم به نظرت چرا در اعداد یک بایتی و در اون بازه نمیتونی 128 مثبت داشته باشی؟

    من الان مکمل دو عدد 128 رو اینجا حساب میکنم، که دقیقا در یک بایت جا گرفت

    +128 : 10000000
    reverse : 01111111
    + 1 : 10000000


    128+ = 128- جالبه نه!

    من فکر میکنم در دستی حساب کردنش مشکل داشته باشین وگرنه چیز خیلی پیچیده ای نیست


    اول یک سوال می پرسم به نظرت چرا در اعداد یک بایتی و در اون بازه نمیتونی 128 مثبت داشته باشی؟ اگر منظورتون در یک بایت علامت دار هست

    به این خاطر که خود عدد 128 مثبت در 8 بایت جا میگیره و دیگه جایی برای بیت علامت

    که اون بیت 0 هست نیست

    یعنی این عدد باید در 2 بایت علامت دار ذخیره بشه ....به صورت زیر

    0000000010000000

    خب شما مکمل 2 عدد 128 رو بدون اضافه کردن بیت علامت حساب کردید

    پس در این صورت من هم اگر بخوام مکمل 2 عدد 255 رو حساب کنم به صورت زیر میشه:


    255(10)=11111111(2)
    11111111
    00000000
    +1
    00000001


    پس عدد 255- هم در یک بایت جا میگیره. !!!!
    آخرین ویرایش به وسیله ...StacK... : پنج شنبه 17 بهمن 1387 در 16:07 عصر

  11. #11
    کاربر دائمی آواتار hoax3r
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    171

    نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    به این خاطر که خود عدد 128 مثبت در 8 بایت جا میگیره و دیگه جایی برای بیت علامت

    که اون بیت 0 هست نیست

    یعنی این عدد باید در 2 بایت علامت دار ذخیره بشه ....به صورت زیر

    0000000010000000

    خب شما مکمل 2 عدد 128 رو بدون اضافه کردن بیت علامت حساب کردید
    در اعداد با علامت یک بایتی شما مجاز به استفاده از عدد 128 نیستین به دلیل اینکه با 128- یکسان هست
    در نتیجه همونطور که گفتین برای نمایش عدد 128 نیاز به دو بایت داریم این به این معنی نیست چون 128
    مثبت دو بایته مکمل دوشم باید 2 بایت باشه شما حرفی که از خود اینتل نقل کردم هم قبول ندارید!!

    پس در این صورت من هم اگر بخوام مکمل 2 عدد 255 رو حساب کنم به صورت زیر میشه:
    255(10)=11111111(2)
    11111111
    00000000
    +1
    00000001

    پس عدد 255- هم در یک بایت جا میگیره. !!!!
    بازم دارین اشتباه می کنید ما در مورد اعداد یک بایتی با علامت صحبت میکنیم که در بازه 127 تا 128- هستن
    پس این 255 رو از کجا آوردین اینو باید تو 2 بایت نشون داد

  12. #12

    نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    من هر حرفی زدم با دلیل بود

    و گفته ی اینتل رو هم طبق مکمل 2 قبول ندارم مگر اینکه این یه موضوع قرار دادی باشه

    که اعدادی که بدون اضافه کردن بیت علامت در مکمل 2 برابر با مثبت همان عدد میشن نیازی

    به اضافه کردن بیت علامت نیست.(تا اینجا قانع شدم)

    و اما در جایی دیگه به این صورت خوندم:
    C
    The Complete Reference
    Fourth Edition

    صفحه 56:

    range of at least 32,767 to –32,768.
    Type
    Typical Size in
    Bits Minimal Range
    char 8 –127 to 127


    دلیل این موضوع چیه؟؟؟

  13. #13

    نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    به احتمال 99 درصد این کتاب و بیشتر کتاب های programming که به این صورت

    گفتند اشتباه هست ....چرا؟؟؟ دوباره به همین قسمت از کتاب توجه کنید:

    range of at least 32,767 to –32,768.
    Type
    Typical Size in
    Bits Minimal Range
    char 8 –127 to 127


    در واقع خط اخر از این قسمت , خط اول خودش رو نقض کرده

    گفته از 32768- تا 32767 در دو بایت جا میشه در واقع 32768- در دوبایت حکم

    128- در یک بایت رو داره , به مکمل 2 این عدد توجه کنید:

    32768(10)=1000000000000000(2)
    reverse: 0111111111111111 (مکمل 1)
    +1 : 1000000000000000 (مکمل 2)


    دیدید که مکمل 2 اون با حالت اولیه و مثبت عدد باینری یکی بود

    پس هیمن موضوع در مورد 128 هم صادق هست .

    اگر کسی نظری مخالف به این موضوع داره بیان کنه..........

  14. #14
    کاربر دائمی آواتار hoax3r
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    171

    نقل قول: رسما غیر ممکنه...(128- در یک بایت علامت دار...)

    درسته اینا همه قرار دادی هست اگه قراره برای این پردازنده برنامه نویسی کنید مجبورید این
    قوانین رو رعایت کنید و اگر قبولشون ندارید اون دیگه مساله ی دیگه ای هست

    و دیگر مطالبی که گفتین و مربوط به زبان سی بود این هم مساله ای جداست هر زبان برنامه نویسی
    میتونه قواعد خاص خودش رو داشته باشه پس واقعا ربطی به موضوعی که اول بحث کردین نداره

    در این مورد هم باید جایی بری که این استاندارد ها رو تعیین کرده کتابا هر چیزی میتونن بنویسن
    مثلا کتابی که دنیس ریچی (خالق سی) نوشته اینو میگه


    INT_MAX 32767 maximum value of int
    INT_MIN -32767 minimum value of int


    یا در استاندارد ISO/IEC 9899:1999 هم اگه بگردی همینو میبینی پس زیاد اعتباری به کتابا نیست
    مراجع مهمن

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •