Software Venture Consulting

FileMaker Pro downloads & Resources
FileMaker Custom Functions
FileMaker Web Viewer Examples
FileMaker Pro & Lasso Consulting
Training
FileMaker Books
FileMaker Articles
FileMaker Error Reference

Free Web Tools
Free FileMaker Tools

Personal Pages
Videos
Adventures
Links

Shopping Cart
Shopping Cart

Search:

Free Newsletter
Signup


Contact


Privacy Policy



FileMaker is a registered trademark of FileMaker, Inc. in the U.S. and other countries.

 

 FileMaker Pro Custom Functions

List  |  Show Random  |  Upload  |  Add This to Your Site

BitOperation( BitNr ; RC ; OPC ; OP1 ; OP2 )

Rate this function:  

RatingRatingRatingRatingRating
  Average rating: 4.2  (44 votes)
  Discuss this Custom Function

Erich Schmidt, none
none

bitwise logical operation

Sample Input:
BitOperation( 0 ; 0 ; 6 ; 145 ; 345)
BitOperation( 0 ; 0 ; 14 ; 5 ; 12)
BitOperation( 0 ; 0 ; 8 ; 5 ; 12)
Sample Output:
456
13
4


 Then copy & paste into FileMaker Advanced's Edit Custom Function window.

Click here to copy To Clip Manager if you have myFMbutler's Clip Manager installed

Description:

26.12.2016 - Latex-code added to generate a PDF-document containing a value table and some hints for application the function.
The code can be compiled with TexShop or the online Latex-compiler on the site https://www.papeeria.com
Function code is unchanged.

Function value is the result of any bitwise logical operation between the binary representation of the integer values OP1 and OP2. Only the 16 least significant bits are processed.
The operation is given by OPC, which can be any integer number from 0 to 15. OPC determines what operation is performed.

Requires other Custom Functions:
BitLsbOperation()

Parameters:
BitNr, RC these parameters must be set to 0 by the caller. Otherwise it leads to faulty results.
OP1; OP2 any integer values (numbers greater than 65,535 are possible, but
useless)
OPC can be any integer number from 0 to 15

OPC=0 is true, if OP1 AND NOT OP1 is true (never)
OPC=1 is true, if NOT (OP1 OR OP2) is true
OPC=2 is true, if NOT OP1 AND OP2 is true
OPC=3 is true, if NOT OP1 is true
OPC=4 is true, if OP1 AND NOT OP2 is true
OPC=5 is true, if NOT OP2 is true
OPC=6 is true, if OP1 XOR OP2 is true (exclusive or)
OPC=7 is true, if NOT (OP1 AND OP2) is true
OPC=8 is true, if OP1 AND OP2 is true (conjunction)
OPC=9 is true, if NOT ( OP1 XOR OP2) is true (equivalence)
OPC=10 is true, if OP2 is true
OPC=11 is true, if OP1 OR NOT OP2 is true
OPC=12 is true, if OP1 is true
OPC=13 is true, if OP1 OR NOT OP2 is true
OPC=14 is true, if OP1 OR OP2 is true (disjunction)
OPC=15 ist true, if OP1 OR NOT OP1 is true (always)

Some simple examples

Set bit 2 and bit 5 in OP1. All other bits leave unchanged.

BitOperation( 0 ; 0 ; 14 ; OP1 ; 2^2+2^5)

Toggle bit 0 , bit 3 and bit 12 in OP1. All other bits leave unchanged.

BitOperation( 0 ; 0 ; 6 ; OP1 ; 2^0+2^3+2^12)

Clear bits 8 and 9 in OP1. All other leave unchanged.

BitOperation( 0 ; 0 ; 4 ; OP1 ; 2^8+2^9)

Check, if one of bit 3 or 5 in OP1 is set.

It‘s true, if the expression BitOperation( 0 ; 0 ; 8 ; OP1 ; 2^3+2^5) is true (not 0).


The following Latex-code can be used for generating a PDF-document with a value table for the functions and some hints for application. Copy the text after this line:

%! program = pdflatex

\documentclass[10pt,a4paper,article]{memoir} % for a short document

\title{Value Table Logical Operations With Two Operands\\Hints for Using in FileMaker}
\author{Erich Schmidt\\ }
\date{26.12.2016} % Delete this line to display the current date
\usepackage{german}
\usepackage[applemac]{inputenc} %Umlaute und ß
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{amsmath}

%%% BEGIN DOCUMENT
\begin{document}

\maketitle

\begin{center}
\copyright \ 2016 Erich Schmidt
\end{center}
\vspace{3cm}
\subsection{The value table:}
\begin{tabular}{|cc|cccccccccccccccc|}
\hline
&& &&&&&&&O&P&C&&&&&&\\
\hline\hline
OP1&OP2&0 &1&2&3&4&5&6&7&8&9&10&11&12&13&14&15\\
\hline\hline
0&0 &0 & 1 & 0 & 1 & 0 & 1& 0 & 1& 0 & 1& 0 & 1& 0 & 1& 0 & 1\\
0&1 & 0 & 0 & 1& 1 & 0 & 0 & 1& 1& 0 & 0 & 1& 1& 0 & 0 & 1& 1\\
1&0 &0 & 0 &0 & 0 &1 & 1 &1 & 1&0 & 0 &0 & 0 &1 & 1 &1 & 1\\
1&1 & 0 & 0 & 0 & 0& 0 & 0 & 0 & 0&1 & 1 &1 & 1&1 & 1 &1 & 1\\
\hline
\end{tabular}
\newpage
\subsection{Notes and hints:}
\begin{enumerate}
\item The table provides an overwiew of the values of the function \[BitOp(OPC;OP1;OP2)\]
for every possible constellation of bits in OP1 and OP2. The benefit is that only one function
needs to be used for bitwise logical Operations like AND, OR, XOR, NOT and so on.
\item Note that in general the operations are not commutative. That means you get different
results if you write BitOP(OPC;OP2;OP1) instead of BitOP(OPC;OP1;OP2).
The commutative operations are those that give in line two and line three the same result.
These are OPC=0, 1, 6, 7, 8, 9, 14 and 15.
\item As you can see is OPC=6 is a bitwise XOR-operation. The XOR returns a value 1 (true),
if the bits in OP1 and OP2 are unequal and a value of 0 (false) else. You also can see, that
OPC=9 is the negation of the result of OPC=6. If OPC=6 returns a 0, so OPC=9 returns a 1 and
vice versa. But now is 6+9=15. This is general context. Whatever an operation OPC returns,
the operation, 15-OPC returns exactly the opposite (the bitwise negation).
\item As can be seen are for OPC=3 the function values the negation of OP1. This means that the
values given by OPC=3 do not depend from the value of OP2. Consequently it doesn't care
what value OP2 has. The function result is always the negation of OP1.
Assumed you perform any operation OPC that returns a value X. If you intend subsequently
perform a negation from X using by OPC=3, then it is an improved performance to do these
in one step. Because of what is mentioned above you get the negation of X by executing of
only one function call with 15-OPC instead of OPC.
\item Now have a look at OPC=5, OPC=10 and OPC=12. All these are also only dependig from
one operand, because first of them gives the negation of OP2 and the other ones OP2 and OP1 itself.
\item Finally there are two operations giving always the same value independend of both operands.
These are OPC=0 (returns always 0) and OPC=15 (returns always 65535). They have no importance for practice,
as well as OPC=10 and OPC=12, because the result is known before performing the operations. In case of OPC=10 and OPC=12 is the result equal to one of the operands, in case of OPC=0 and OPC=15 is the result constant.
\end{enumerate}
\end{document}

Note: these functions are not guaranteed or supported by BrianDunning.com. Please contact the individual developer with any questions or problems.

This is my Custom Function and I want to edit it

Discuss:

There are no comments yet. Be the first to post a comment about this Custom Function! Please try to keep it brief & to the point. Anyone can post:

Your Name:
City/Location:
Comment:
characters left. If you paste in more than 1500 characters, it will be truncated. Discuss the function - advertisements and other useless posts will be deleted.
Answer 4 + 5 =
Search for Custom Functions:

Custom Functions Widget
Download the Custom Function Dashboard Widget for OS X
Keep all the latest Custom Functions right at your fingertips!

Newest Custom Functions:

1. ListSort ( ValueList )
  (Mon, Aug 21, 11:04am)
2. AddSortOrder ( values ; padWidth ; delimiter ; currentValue )
  (Wed, Aug 16, 10:37am)
3. AddAddHiddenSortOrder ( values ; currentValue )
  (Wed, Aug 16, 10:31am)
4. String_to_Number_in_Scientific_Notation ( text )
  (Tue, Aug 15, 9:20am)
5. Quartic_Solver ( a, b, c , d, e, which_x )
  (Sun, Aug 13, 1:05pm)
6. SQLRefSimple ( FldRef ; Option1TO2Fld3Both )
  (Fri, Aug 11, 3:19pm)
7. BinaryStringXOR ( a ; b )
  (Mon, Aug 07, 1:46pm)
8. VarListCreatorPro ( VarType, VarName, VarValue, Mode)
  (Mon, Aug 07, 1:05pm)

RSS Feed of Custom Functions