Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 General Discussions

Reply
 
Thread Tools Display Modes
  #11  
Old 06-08-2005, 01:39 PM
Andreas's Avatar
Andreas Andreas is offline
 
Join Date: Jan 2004
Location: Germany
Posts: 6,863
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

OK, let's start at 0
Computers can only handle two signal states: Low and High (Voltage).
This represents a Bit, eg. 0 or 1.
All Numbers are constructed as a series of bits, for example 01101001.
This is called the binary or dual system, in opposite to the decimal system we use for everyday calculations.
As there are only 2 Values (0 and 1), the base for this is 2.
How do we determine the value of a number in the decimal system:
For eamle 126 is One Hundred and Twenytsix, or One Hundred + Tweny + Six, or formally:
6*10^0 + 2*10^2 + 1*10^2
This works the same way in dual system, but with 2 as base:
10000 = 0*2^0 + 0*2^1 + 0*2^2 + 0*2^3 + 0*2^4 = 16

As you can see, 16 represents the 5th bit.

Now we got some decimal number, let's say 287654.

How do we know if the 5th bit is set?
First we convert this to a number in dual system by cintinued division:
Code:
287654 / 2 = 143827 + 0
143827 / 2 = 71913  + 1
71913  / 2 = 35956  + 1
35956 / 2 = 17978   + 0
17978 / 2 = 8989    + 0
8989 / 2 = 4494     + 1
4494 / 2 = 2247     + 0
2247 / 2 = 1123     + 1
1123 / 2 = 561      + 1
561 / 2 = 280       + 1
280 / 2 = 140       + 0
140 / 2 = 70        + 0
70 / 2 = 35         + 0
35 / 2 = 17         + 1
17 / 2 = 8          + 1
8 / 2 = 4           + 0
4 / 2 = 2           + 0
2 / 2 = 1           + 0
1 / 2 = 0           + 1
Now we write down the remaining values in reversed order:
Code:
1000110001110100110
This is decimal 287654 in dual system.

Now we can check if bit #5 (decimal 16, dual 10000) is set:
Code:
1000110001110100110
              10000
Technically, this is a AND operation. Every bit position is compared - if both are the same the result-bit at this position is 1:
Code:
  1000110001110100110
&               10000
= 0000000000000000000
As the can see, the result is 0.

But if we had for example
Code:
  1000110001110110110
&               10000
= 0000000000000010000
Here the result is not 0, eg. the bit is set.
What is the difference between 1000110001110100110 and 1000110001110110110?

We already know that 1000110001110100110 is 287654 because we started with this.
So let's convert 1000110001110110110 to decimal:

0*2^0 + 1*2^1 + 1*2^1 + 0*2^2 ... = 287670.

As you can see, the difference is 16, as expected as this represents the bit we just set.

Maybe this makes things a bit clearer - or got you totally confused
Reply With Quote
  #12  
Old 06-08-2005, 03:34 PM
hardwareirc.com hardwareirc.com is offline
 
Join Date: Jun 2002
Posts: 14
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I know perfectly how numbers are represented and the decimal and binary coding systems.

This is the problem:

after the first replies to this thread I understood that the binary string with all the on-off (0-1) settings was stored as an integer in mysql.

PHP Code:
// Defined constants used for user field. 
$_USEROPTIONS = array( 
    
'showsignatures'    => 1
    
'showavatars'       => 2
    
'showimages'        => 4
    
'coppauser'         => 8
    
'adminemail'        => 16
From this code I thought that if I want to see if the signature is enabled i have to check the bit #1, #2 for avatar, #4 for images, #8 for coppa, and #16 for email.

I suppose that the "WHERE options & 16" condition goes to check the bit #16 if is "ON" or "TRUE", or... 1!

Am I wrong?

The other posts (16 or not 16 :P ) confused me a bit...
Reply With Quote
  #13  
Old 06-08-2005, 04:10 PM
Andreas's Avatar
Andreas Andreas is offline
 
Join Date: Jan 2004
Location: Germany
Posts: 6,863
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by hardwareirc.com
PHP Code:
$_USEROPTIONS = array(
        
'showsignatures'    => 1,
        
'showavatars'       => 2,
        
'showimages'        => 4,
        
'coppauser'         => 8,
        
'adminemail'        => 16,
        
'showvcard'         => 32,
        
'dstauto'           => 64,
        
'dstonoff'          => 128,
        
'showemail'         => 256,
        
'invisible'         => 512,
        
'showreputation'    => 1024,
        
'receivepm'         => 2048,
        
'emailonpm'         => 4096,
        
'hasaccessmask'     => 8192,
        
//'emailnotification' => 16384,
        
'postorder'         => 32768,
); 
From this code I thought that if I want to see if the signature is enabled i have to check the bit #1, #2 for avatar, #4 for images, #8 for coppa, and #16 for email.
Check Bit #4096 to see if the user want's to receive notifications about new PMs via eMail?
Maybe dozenzs of years in the future ... 65535 Bit-Systems ^.^

No. These are decimal values.

WHERE options & 16 checks if Bit #5 (2^4=16) is set.
Reply With Quote
  #14  
Old 06-08-2005, 04:46 PM
hardwareirc.com hardwareirc.com is offline
 
Join Date: Jun 2002
Posts: 14
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by KirbyDE
Check Bit #4096 to see if the user want's to receive notifications about new PMs via eMail?
Maybe dozenzs of years in the future ... 65535 Bit-Systems ^.^

No. These are decimal values.

WHERE options & 16 checks if Bit #5 (2^4=16) is set.
Oh, well... now it's clear

I wasn't able to figure out the big numbers of the options field

Perhaps do you know where can I find some documentation about the & operator?

Thanks!

Quote:
Originally Posted by hardwareirc.com
Oh, well... now it's clear

I wasn't able to figure out the big numbers of the options field

Perhaps do you know where can I find some documentation about the & operator?

Thanks!
Oh... sorry, I d0n't know where do I have my mind today.... I asked for the documentation of the bitwise AND operator :P :nervous: :ninja:
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 01:59 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.07552 seconds
  • Memory Usage 2,212KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (5)bbcode_code
  • (2)bbcode_php
  • (3)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (4)post_thanks_box
  • (4)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (4)post_thanks_postbit_info
  • (4)postbit
  • (4)postbit_onlinestatus
  • (4)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete