اپراتورهاي بيتي بزرگتر از 30

bono056

Member
سلام
من تو PHP از اپراتورهاي بيتي براي سطح دسترسي ها استفاده كردم.
کد:
define (PERA, 1 << 0);
define (PERB, 1 << 1);
define (PERC, 1 << 2);
.
.
define (PERE, 1 << 31);
مشكل اينجاس كه اين سيستم تا 30 كار ميكته و از 31 به بعد نميشه ازش استفاده كرد.
يه توضيحي راجع بهش بدين ممنون ميشم.
 

oxygenws

Active Member
این دستوراتی که شما نوشتی قراره چیکار کنه که تا ۳۰ کار می کنه و ۳۱ به بعد رو کار نمی کنه؟!!
یعنی شما از دستور آخر چه انتظاری داری که الان برآورده نشده؟؟
 

bono056

Member
سلام
خروجي اينا رو ببين:
کد:
define ('PERA', 1 << 0);//==>1
define ('PERB', 1 << 1);//==> 2
define ('PERC', 1 << 2);//==> 4
.
.
.
define ('PERD', 1 << 29);//==> 536870912
define ('PERE', 1 << 30);//==> 1073741824
define ('PERF', 1 << 31);//==> -2147483648

چرا آخري منفيه؟
 

oxygenws

Active Member
سلام،

کد:
 The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). PHP does not support unsigned integers.

همونطور که می بینی طول یک عدد int برابر ۳۲ بیت می باشد.
بیت اول که عدد یک قرار می گیره و بیت سمت چپ هم که بیت علامت هستش یعنی می مونه ۳۰ تا. پس این برنامه برای ۳۰ تا شیفت درست کار می کنه و برای بیشتر از اون خراب.

شاید این رو هم تجربه کرده باشی که اگه ۳۲ تا شیفت بدی مقدار می شه ۰.

موفق باشید، امید
 

bono056

Member
سلام
خب منظور من اين بود كه بايد چيكار كرد.
يه ثابت بطور defaukt 32 بيتيه.
بايد يه فيلد ديگه براي PermissionLevel تعريف كنم كه خيلي دردسر داره.
 

bono056

Member
const رو چه چه جوري ميشه float تعريف كرد؟
تو تعريف ثابتها ميشه datatype رو هم تعيين كرد؟
 

bono056

Member
سلام
توي VBScript هم اين اپراتورهاي بيتي وجود دارن؟
Shift Left & Right , AND , OR براي مقايسه اونا؟
 

oxygenws

Active Member
دقیقا نمی دونم ولی این رو تست کن:
کد:
define ('PERA', 1.0 << 0);//==>1

در مورد vb هم من نمی تونم کمکی بکنم :)
 

oxygenws

Active Member
من هنوز راهی پیدا نکردم، فقط فهمیدم که مشکل از const نیست. بلکه از عملگر بیتی می باشد!!
 

bono056

Member
سلام
الان مقدار داخل const درست نيست.(يه عدد منفيه).
تا وقتي اون عدد منطقي نيست مسلمه اپراتور درست جواب نميده.
 

oxygenws

Active Member
:) من می گم عملگر بیتی است که این مشکل رو به وجود میاره و باعث می شه عدد منفی داخل const ذخیره بشه (شما برعکسش رو می گی)
 

جدیدترین ارسال ها

بالا