bit manipulation


 
Thread Tools Search this Thread
Top Forums Programming bit manipulation
# 1  
Old 10-16-2012
Java bit manipulation

what is the difference b/w

1) #define TI_ZN (1 << 1)
#define TI_ZN (1 << 2)
and
2) #define TI_ZN 2
#define TI_ZN 4

Instead of using left shift we can assign the value 2 directly?
Or there is a reason behind this to use shift operator?
Smilie
# 2  
Old 10-16-2012
There is certainly no reason to #define TI_ZN to two different values (unless there are conditional tests to choose one setting over another based on the compilation environment) unless you're trying to confuse someone reading your source code.

Sometimes it makes sense when defining masks for bit fields or defining various parts of a value that contains bit fields to make it easier to understand the individual fields being set. For example you might find something like:
Code:
/* File type */
#define S_IFMT          (017<<12)         /* file type mask */
#define S_IFIFO         (001<<12)         /* named pipe (fifo) */
#define S_IFCHR         (002<<12)         /* character special */
#define S_IFDIR         (004<<12)         /* directory */
#define S_IFBLK         (006<<12)         /* block special */
#define S_IFREG         (010<<12)         /* regular */
#define S_IFLNK         (012<<12)         /* symlink */
#define S_IFSOCK        (014<<12)         /* socket */

on some systems in <sys/stat.h>.
This User Gave Thanks to Don Cragun For This Post:
# 3  
Old 10-16-2012
I think it's mostly semantics. If you use the shift operator, you emphasise on a certain bit pattern at a specific bit offset in a variable. In Don Cragun's example, the emphasis is on the the fact, that the values 017, 01, ... are stored at an offset of 12 bits from the least significant bit of the variable.

If you use the shift operator on variables, it is faster than a multiplication in most cases.
This User Gave Thanks to hergp For This Post:
# 4  
Old 10-16-2012
Hi Don cragun, its exactly like this
#define TI_ZN_FAILOVER (1 << 1) /* bit 1 */
#define TI_ENT_PORT (1 << 2) /* bit 2 */
#define TI_ENT_WWN (1 << 3) /* bit 3 */

so why can t they assign like below
#define TI_ZN_FAILOVER 2 /* bit 1 */
#define TI_ENT_PORT 4 /* bit 2 */
#define TI_ENT_WWN 8 /* bit 3 */
# 5  
Old 10-16-2012
Quote:
Originally Posted by powyama
Hi Don cragun, its exactly like this
#define TI_ZN_FAILOVER (1 << 1) /* bit 1 */
#define TI_ENT_PORT (1 << 2) /* bit 2 */
#define TI_ENT_WWN (1 << 3) /* bit 3 */

so why can t they assign like below
#define TI_ZN_FAILOVER 2 /* bit 1 */
#define TI_ENT_PORT 4 /* bit 2 */
#define TI_ENT_WWN 8 /* bit 3 */
They could - it's just a matter of style. Using '(1 << 3)' makes it explicitly clear that what you're dealing with a bit. They both mean the same thing to the compiler, it's just what they signal to humans reading the code that differs.
This User Gave Thanks to JohnGraham For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

5 More Discussions You Might Find Interesting

1. Windows & DOS: Issues & Discussions

Which version of Windows Vista to install with a product key? 32-bit or 64-bit?

Hello everyone. I bought a dell laptop (XPS M1330) online which came without a hard drive. There is a Windows Vista Ultimate OEMAct sticker with product key at the bottom case. I checked dell website (here) for this model and it says this model supports both 32 and 64-bit version of Windows... (4 Replies)
Discussion started by: milhan
4 Replies

2. Shell Programming and Scripting

How to handle 64 bit arithmetic operation at 32 bit compiled perl interpreter?H

Hi, Here is the issue. From the program snippet I have Base: 0x1800000000, Size: 0x3FFE7FFFFFFFF which are of 40 and 56 bits. SO I used use bignum to do the math but summing them up I always failed having correct result. perl interpreter info, perl, v5.8.8 built for... (0 Replies)
Discussion started by: rrd1986
0 Replies

3. UNIX for Advanced & Expert Users

migrating unix mp-ras 32 bit to linux suse 64 bit

Hi. I need to migrate the whole unix environment from a Unix mp-ras 32 bit to a Linux Suse 64 bit. 1) can i use cpio to copy the data? 2) can i just copy the users from unix to linux or do i have to create them by hand 3) are there any other concerns i should worry about? thanx (1 Reply)
Discussion started by: mrodrig
1 Replies

4. Red Hat

boot the 32 bit kernel on a 64 bit PPC Linux machine?

Hi all, I'm looking to cover a corner case for an upcoming test cycle. Is there a way to boot a RedHat Advanced Server 4 (update 3) installed on a Power PC machine to use a 32 bit kernel? This would be similar to what is done here -> https://www.unix.com/aix/26204-aix-platform.html I've done... (0 Replies)
Discussion started by: philrau
0 Replies

5. Programming

copying or concatinating string from 1st bit, leaving 0th bit

Hello, If i have 2 strings str1 and str2, i would like to copy/concatenate str2 to str1, from 1st bit leaving the 0th bit. How do i do it? (2 Replies)
Discussion started by: jazz
2 Replies
Login or Register to Ask a Question