
- Design Pattern
- Interview Q

C Control Statements
C functions, c dynamic memory, c structure union, c file handling, c preprocessor, c command line, c programming test, c interview.
- Send your Feedback to [email protected]
Help Others, Please Share

Learn Latest Tutorials

Transact-SQL

Reinforcement Learning

R Programming

React Native

Python Design Patterns

Python Pillow

Python Turtle

Preparation

Verbal Ability

Interview Questions

Company Questions
Trending Technologies

Artificial Intelligence

Cloud Computing

Data Science

Machine Learning

B.Tech / MCA

Data Structures

Operating System

Computer Network

Compiler Design

Computer Organization

Discrete Mathematics

Ethical Hacking

Computer Graphics

Software Engineering

Web Technology

Cyber Security

C Programming

Control System

Data Mining

Data Warehouse
Javatpoint Services
JavaTpoint offers too many high quality services. Mail us on [email protected] , to get more information about given services.
- Website Designing
- Website Development
- Java Development
- PHP Development
- Graphic Designing
- Digital Marketing
- On Page and Off Page SEO
- Content Development
- Corporate Training
- Classroom and Online Training
Training For College Campus
JavaTpoint offers college campus training on Core Java, Advance Java, .Net, Android, Hadoop, PHP, Web Technology and Python. Please mail your requirement at [email protected] Duration: 1 week to 2 week

- Data Structure & Algorithm Classes (Live)
- System Design (Live)
- DevOps(Live)
- Explore More Live Courses
- Interview Preparation Course
- Data Science (Live)
- GATE CS & IT 2024
- Data Structure & Algorithm-Self Paced(C++/JAVA)
- Data Structures & Algorithms in Python
- Explore More Self-Paced Courses
- C++ Programming - Beginner to Advanced
- Java Programming - Beginner to Advanced
- C Programming - Beginner to Advanced
- Full Stack Development with React & Node JS(Live)
- Java Backend Development(Live)
- Android App Development with Kotlin(Live)
- Python Backend Development with Django(Live)
- Complete Data Science Program(Live)
- Mastering Data Analytics
DevOps Engineering - Planning to Production
- CBSE Class 12 Computer Science
- School Guide
- All Courses
- Linked List
- Binary Tree
- Binary Search Tree
- Advanced Data Structure
- All Data Structures
- Asymptotic Analysis
- Worst, Average and Best Cases
- Asymptotic Notations
- Little o and little omega notations
- Lower and Upper Bound Theory
- Analysis of Loops
- Solving Recurrences
- Amortized Analysis
- What does 'Space Complexity' mean ?
- Pseudo-polynomial Algorithms
- Polynomial Time Approximation Scheme
- A Time Complexity Question
- Searching Algorithms
- Sorting Algorithms
- Graph Algorithms
- Pattern Searching
- Geometric Algorithms
- Mathematical
- Bitwise Algorithms
- Randomized Algorithms
- Greedy Algorithms
- Dynamic Programming
- Divide and Conquer
- Backtracking
- Branch and Bound
- All Algorithms
- Company Preparation
- Practice Company Questions
- Interview Experiences
- Experienced Interviews
- Internship Interviews
- Competitive Programming
- Design Patterns
- System Design Tutorial
- Multiple Choice Quizzes
- Go Language
- Tailwind CSS
- Foundation CSS
- Materialize CSS
- Semantic UI
- Angular PrimeNG
- Angular ngx Bootstrap
- jQuery Mobile
- jQuery EasyUI
- React Bootstrap
- React Rebass
- React Desktop
- React Suite
- ReactJS Evergreen
- ReactJS Reactstrap
- BlueprintJS
- TensorFlow.js
- English Grammar
- School Programming
- Number System
- Trigonometry
- Probability
- Mensuration
- Class 8 Syllabus
- Class 9 Syllabus
- Class 10 Syllabus
- Class 11 Syllabus
- Class 8 Notes
- Class 9 Notes
- Class 10 Notes
- Class 11 Notes
- Class 12 Notes
- Class 8 Formulas
- Class 9 Formulas
- Class 10 Formulas
- Class 11 Formulas
- Class 8 Maths Solution
- Class 9 Maths Solution
- Class 10 Maths Solution
- Class 11 Maths Solution
- Class 12 Maths Solution
- Class 7 Notes
- History Class 7
- History Class 8
- History Class 9
- Geo. Class 7
- Geo. Class 8
- Geo. Class 9
- Civics Class 7
- Civics Class 8
- Business Studies (Class 11th)
- Microeconomics (Class 11th)
- Statistics for Economics (Class 11th)
- Business Studies (Class 12th)
- Accountancy (Class 12th)
- Macroeconomics (Class 12th)
- Machine Learning
- Data Science
- Mathematics
- Operating System
- Computer Networks
- Computer Organization and Architecture
- Theory of Computation
- Compiler Design
- Digital Logic
- Software Engineering
- GATE 2024 Live Course
- GATE Computer Science Notes
- Last Minute Notes
- GATE CS Solved Papers
- GATE CS Original Papers and Official Keys
- GATE CS 2023 Syllabus
- Important Topics for GATE CS
- GATE 2023 Important Dates
- Software Design Patterns
- HTML Cheat Sheet
- CSS Cheat Sheet
- Bootstrap Cheat Sheet
- JS Cheat Sheet
- jQuery Cheat Sheet
- Angular Cheat Sheet
- Facebook SDE Sheet
- Amazon SDE Sheet
- Apple SDE Sheet
- Netflix SDE Sheet
- Google SDE Sheet
- Wipro Coding Sheet
- Infosys Coding Sheet
- TCS Coding Sheet
- Cognizant Coding Sheet
- HCL Coding Sheet
- FAANG Coding Sheet
- Love Babbar Sheet
- Mass Recruiter Sheet
- Product-Based Coding Sheet
- Company-Wise Preparation Sheet
- Array Sheet
- String Sheet
- Graph Sheet
- ISRO CS Original Papers and Official Keys
- ISRO CS Solved Papers
- ISRO CS Syllabus for Scientist/Engineer Exam
- UGC NET CS Notes Paper II
- UGC NET CS Notes Paper III
- UGC NET CS Solved Papers
- Campus Ambassador Program
- School Ambassador Program
- Geek of the Month
- Campus Geek of the Month
- Placement Course
- Testimonials
- Student Chapter
- Geek on the Top
- Geography Notes
- History Notes
- Science & Tech. Notes
- Ethics Notes
- Polity Notes
- Economics Notes
- UPSC Previous Year Papers
- SSC CGL Syllabus
- General Studies
- Subjectwise Practice Papers
- Previous Year Papers
- SBI Clerk Syllabus
- General Awareness
- Quantitative Aptitude
- Reasoning Ability
- SBI Clerk Practice Papers
- SBI PO Syllabus
- SBI PO Practice Papers
- IBPS PO 2022 Syllabus
- English Notes
- Reasoning Notes
- Mock Question Papers
- IBPS Clerk Syllabus
- Apply for a Job
- Apply through Jobathon
- Hire through Jobathon
- All DSA Problems
- Problem of the Day
- GFG SDE Sheet
- Top 50 Array Problems
- Top 50 String Problems
- Top 50 Tree Problems
- Top 50 Graph Problems
- Top 50 DP Problems
- Solving For India-Hackthon
- GFG Weekly Coding Contest
- Job-A-Thon: Hiring Challenge
- BiWizard School Contest
- All Contests and Events
- Saved Videos
- What's New ?
- Data Structures
- Interview Preparation
- Topic-wise Practice
- Latest Blogs
- Write & Earn
- Web Development
Related Articles
- Write Articles
- Pick Topics to write
- Guidelines to Write
- Get Technical Writing Internship
- Write an Interview Experience
- Nvidia Interview | Set 1
- Nvidia Interview | Set 3 (On Campus)
- Nvidia Interview Experience | Set 4 (On Campus)
- Nvidia Interview Experience | Set 5
- Compute average of two numbers without overflow
- Implementing ternary operator without any conditional statement
Conditional or Ternary Operator (?:) in C/C++
- A comma operator question
- Result of comma operator as l-value in C and C++
- Order of operands for logical operators
- Increment (Decrement) operators require L-value Expression
- Precedence of postfix ++ and prefix ++ in C/C++
- Modulus on Negative Numbers
- C/C++ Ternary Operator – Some Interesting Observations
- Pre-increment (or pre-decrement) With Reference to L-value in C++
- new and delete Operators in C++ For Dynamic Memory
- malloc() vs new
- delete and free() in C++
- delete keyword in C++
- Destructors in C++
- Virtual Destructor
- Pure Virtual Destructor in C++
- Pure Virtual Functions and Abstract Classes in C++
- Nvidia Interview | Set 2 (On Campus for R & D Team, Pune)
- Dynamic Memory Allocation in C using malloc(), calloc(), free() and realloc()
- Arrays in C/C++
- std::sort() in C++ STL
- Bitwise Operators in C/C++
- Segmentation Fault in C/C++
- Left Shift and Right Shift Operators in C/C++
- Difficulty Level : Easy
- Last Updated : 23 Jun, 2022
The conditional operator is kind of similar to the if-else statement as it does follow the same algorithm as of if-else statement but the conditional operator takes less space and helps to write the if-else statements in the shortest way possible.
Syntax: The conditional operator is of the form
Or the syntax will also be in this form
Or syntax will also be in this form
It can be visualized into if-else statement as:
Since the Conditional Operator ‘?:’ takes three operands to work, hence they are also called ternary operators . Working: Here, Expression1 is the condition to be evaluated. If the condition( Expression1 ) is True then Expression2 will be executed and the result will be returned. Otherwise, if the condition( Expression1 ) is false then Expression3 will be executed and the result will be returned.
Example 1: Program to Store the greatest of the two Number.
Example 2: Program to check whether a year is leap year or not.
Please Login to comment...
- sharmaparth5399
- susobhanakhuli
- C-Operators
- cpp-operator
Master C++ Programming - Complete Beginner to Advanced
Complete interview preparation - self paced, full stack development with react & node js - live, improve your coding skills with practice, start your coding journey now.
This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
?: operator - the ternary conditional operator
- 3 minutes to read
- 12 contributors
The conditional operator ?: , also known as the ternary conditional operator, evaluates a Boolean expression and returns the result of one of the two expressions, depending on whether the Boolean expression evaluates to true or false , as the following example shows:
As the preceding example shows, the syntax for the conditional operator is as follows:
The condition expression must evaluate to true or false . If condition evaluates to true , the consequent expression is evaluated, and its result becomes the result of the operation. If condition evaluates to false , the alternative expression is evaluated, and its result becomes the result of the operation. Only consequent or alternative is evaluated.
Beginning with C# 9.0, conditional expressions are target-typed. That is, if a target type of a conditional expression is known, the types of consequent and alternative must be implicitly convertible to the target type, as the following example shows:
If a target type of a conditional expression is unknown (for example, when you use the var keyword) or the type of consequent and alternative must be the same or there must be an implicit conversion from one type to the other:
The conditional operator is right-associative, that is, an expression of the form
is evaluated as
You can use the following mnemonic device to remember how the conditional operator is evaluated:
Conditional ref expression
A ref local or ref readonly local variable can be assigned conditionally with a conditional ref expression. You can also use a conditional ref expression as a reference return value or as a ref method argument .
The syntax for a conditional ref expression is as follows:
Like the original conditional operator, a conditional ref expression evaluates only one of the two expressions: either consequent or alternative .
In a conditional ref expression, the type of consequent and alternative must be the same. Conditional ref expressions aren't target-typed.
The following example demonstrates the usage of a conditional ref expression:
Conditional operator and an if statement
Use of the conditional operator instead of an if statement might result in more concise code in cases when you need conditionally to compute a value. The following example demonstrates two ways to classify an integer as negative or nonnegative:
Operator overloadability
A user-defined type can't overload the conditional operator.
C# language specification
For more information, see the Conditional operator section of the C# language specification .
Specifications for newer features are:
- Conditional ref expressions (C# 7.2)
- Target-typed conditional expression (C# 9.0)
- Simplify conditional expression (style rule IDE0075)
- C# reference
- C# operators and expressions
- if statement
- ?. and ?[] operators
- ?? and ??= operators
- ref keyword
Submit and view feedback for
Additional resources

Conditional Operator in C
The conditional operator is the one and only ternary operator in the C programming language. It can be used as an alternative for if-else condition if the 'if else' has only one statement each. The conditional operator takes an expression and executes the first statement if the expression evaluates to be true, and the second statement if the expression evaluates to be false.
Before reading this article, you should have some understanding of the following C Programming topics:
- Ternary Operator in C
- Tokens in C
- Compilation Process in C
- In this article, we will learn about the conditional operator in the C programming language, its syntax and its working.
- We will also see when to use the conditional operator over if-else condition.
- Then, finally article will answer some of the most frequently asked questions about the conditional operator.
The conditional operator in the C programming language
I believe you would have found yourself in this situation one or more times, where you write an if-else code just to execute a single statement. That is kind of a fuss, right? The conditional operator was designed especially for this problem. The conditional operator can help you make decision-making statements in just a single line, whereas an if-else would take more than one line.
The conditional operator takes three operands, so it is a ternary operator. The conditional operator is the only ternary operator available in the C programming language , so the names ternary operator and conditional operator are used alternatively to mean the conditional operator. The operands can be expressions, statements, constants, or variables . Since they always start with a condition as the first operand it is suitably named as conditional operator.
Syntax of conditional operator in C
The expression will be treated as a logical condition, and any non 0 value will be considered as true, and 0 as false. The statement1 and statement2 can be a statement, an expression, a variable, or a constant. One of the statements will get executed based on the result obtained from the evaluation of the given expression.
Working of conditional operator in C
The conditional operator of the C programming language works as follows:
- The condition is evaluated first and the result of the condition is implicitly converted to bool.
- If the condition evaluates to be true the first statement -- the statement after the question mark will get executed.
- If the condition evaluates to be false then the second statement -- the statement after the colon gets executed.
The result of the conditional operator is the result of one of the two expressions present in the conditional operator. Only one of the last two operands or expressions gets evaluated, the other expression just gets ignored.

Another version of the conditional operator in C
The conditional operator is a shorter version of the if-else statement for the cases where the if statement would only have one statement. The conditional operator also has a shorter version of itself. This version of the conditional operator was designed to help with the process of checking a condition and assigning a value to a variable, one of the most commonly used use cases in the programming world.
Syntax of the conditional operator in C:
Working of the conditional operator in c:.
The working of this version of the conditional operator is more similar to that of the original conditional operator. The compiler will first evaluate the condition and then store value1 to the variable if the condition is evaluated to be true, and the value2 to will be assigned to the variable in case if the condition evaluates to be false.

Some important remarks about the conditional operator.
The first operand of the conditional operator should be of integral or of pointer type. The second and the third operands should be of the same type, if not the C compiler will implicitly convert them to that of the same data type.
Associativity of the conditional operator in C
The Associativity property defines the order in which the operands of the operator gets executed. When an expression has more than one operator in it, and more than one operators have the same precedence, then the order in which the operator gets executed is based on the associativity. The Associativity of the conditional operator is from Right to Left .
Difference between conditional operator in C and if-else statement in C
The if-else statement and the conditional operator of the C programming language are more similar to each other. They perform almost the same operation -- they check a condition and execute a statement based on the result obtained from the evaluation of the condition. The conditional operator was designed so that the user could write code more efficiently. The conditional operator can be used in the case of an if-else statement if the if-else statement only has one statement to execute. The conditional operator reduces the number of lines of code in a program. Some noteworthy differences between the conditional operator and the if-else statement of the C programming language are listed in the below tabular column:
Examples of the Conditional operator in C
All these theories can be exhausting, so let's jump into some coding and see some situations where the use of the conditional operator can be extremely helpful.
print whether the given number is odd or even:
- You will already be familiar with the first three lines of code. They initialize a variable num and read an integer input.
- The conditional operator will first check for the given condition, in the first input i.e., 13 the condition 13 % 2 == 1 evaluates to false, so the second part of the statement gets executed. So the string "The given number is odd" gets printed as the output.
- In the second input i.e., 6 the condition 6 % 2 == 0 evaluates to true, so the first statement gets executed and the string "The given number is even" gets printed as the output.
Frequently Asked Questions (FAQ) about the Conditional operator in C
Let's now answer some of the most Frequently asked questions about the conditional operator.
Is the conditional operator in C and the ternary operator of the C programming language the same?
yes, the conditional operator is sometimes referred to as the ternary operator.
Why is it called a ternary operator?
In the C programming language, the operators are classified as unary, binary, and ternary based on the number of operands they require. In C programming the conditional operator is the only ternary operator, and hence it is also referred to as the ternary operator.
Why is it called a conditional operator in C?
The first operand for the conditional operator is always a condition, so it is called the conditional operator.
Can I use conditional operator in C instead of if statement?
The conditional operator cannot be replaced in the position of the if statement, cause the conditional operator requires three operands so you have no option but to state the else part to execute.
- In this article, we learned what the conditional operator of the C programming language is, its syntax, pictorial representation and meaning of the syntax. We also looked at another version of the conditional operator that can help you with assignment statements.
- We saw an example that explains how you can use the conditional operator to print whether the given number is odd or even.
- We looked upon the most frequently asked questions about the conditional operator.

- Skip to main content
- Skip to search
- Skip to select language
- Get MDN Plus
- English (US)
Conditional (ternary) operator
The conditional (ternary) operator is the only JavaScript operator that takes three operands: a condition followed by a question mark ( ? ), then an expression to execute if the condition is truthy followed by a colon ( : ), and finally the expression to execute if the condition is falsy . This operator is frequently used as an alternative to an if...else statement.
An expression whose value is used as a condition.
An expression which is executed if the condition evaluates to a truthy value (one which equals or can be converted to true ).
An expression which is executed if the condition is falsy (that is, has a value which can be converted to false ).

Description
Besides false , possible falsy expressions are: null , NaN , 0 , the empty string ( "" ), and undefined . If condition is any of these, the result of the conditional expression will be the result of executing the expression exprIfFalse .
A simple example
Handling null values.
One common usage is to handle a value that may be null :
Conditional chains
The ternary operator is right-associative, which means it can be "chained" in the following way, similar to an if … else if … else if … else chain:
This is equivalent to the following if...else chain.
Specifications
Browser compatibility.
BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
- if statement
- Nullish coalescing operator
- Optional chaining
- Making decisions in your code — conditionals
- Expressions and operators
Conditional Operators
- Java Programming
- PHP Programming
- Javascript Programming
- Delphi Programming
- C & C++ Programming
- Ruby Programming
- Visual Basic
- M.A., Advanced Information Systems, University of Glasgow
Conditional operators are used to evaluate a condition that's applied to one or two boolean expressions. The result of the evaluation is either true or false.
There are three conditional operators:
The logical AND and logical OR operators both take two operands. Each operand is a boolean expression (i.e., it evaluates to either true or false). The logical AND condition returns true if both operands are true, otherwise, it returns false. The logical OR condition returns false if both operands are false, otherwise, it returns true.
Both the logical AND and logical OR operators apply a short circuit method of evaluation. In other words, if the first operand determines the overall value for the condition, then the second operand is not evaluated. For example, if the logical OR operator evaluates its first operand to be true, it does not need to evaluate the second one because it already knows the logical OR condition has to be true. Similarly, if the logical AND operator evaluates its first operand to be false, it can skip the second operand because it already knows the logical AND condition will be false.
The ternary operator takes three operands. The first is a boolean expression; the second and third are values. If the boolean expression is true, the ternary operator returns the value of the second operand, otherwise, it returns the value of the third operand.
An Example of Conditional Operators
To test if a number is divisible by two and four:
The conditional operator "&&" first evaluates whether its first operand (i.e., number % 2 == 0) is true and then evaluates whether its second operand (i.e., number % 4 == 0) is true. As both are true, the logical AND condition is true.
:max_bytes(150000):strip_icc():format(webp)/450823979-56a811b95f9b58b7d0f05ea0.jpg)
- How to Return Multiple Values From a Delphi Function
:max_bytes(150000):strip_icc():format(webp)/biconditional-56a8faa25f9b58b7d0f6ea45.jpg)
By clicking “Accept All Cookies”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts.
12. Conditional (? :) Operator
Conditional operator (also known as arithmetic if , ) is a ternary operator
If expression1 is true , then the result of the condition is expression2 .
Otherwise, the result of the condition is expression3 .
Please note that Internet Explorer version 8.x is not supported as of January 1, 2016. Please refer to this page for more information.
Conditional Operator
Related terms:.
- Conditional Signal Assignment
- Multiplexer
- Postcondition
- Compound Statement
- Parallel Composition
- Target Language
Hardware Description Languages
Sarah L. Harris , David Harris , in Digital Design and Computer Architecture , 2022
SystemVerilog
The conditional operator ?: chooses, based on a first expression, between a second and third expression. The first expression is called the condition . If the condition is 1, the operator chooses the second expression. If the condition is 0, the operator chooses the third expression.
?: is especially useful for describing a multiplexer because, based on the first input, it selects between two others. The following code demonstrates the idiom for a 2:1 multiplexer with 4-bit inputs and outputs using the conditional operator.
module mux2(input logic [3:0] d0, d1,
input logic s,
output logic [3:0] y);
assign y = s ? d1 : d0;
If s is 1, then y = d1 . If s is 0, then y = d0 .
?: is also called a ternary operator because it takes three inputs. It is used for the same purpose in the C and Java programming languages.
Introduction to Ruby
Jason Andress , Ryan Linn , in Coding for Penetration Testers (Second Edition) , 2017
Control statements
Earlier, we used some basic if statements and for loops. Ruby conditionals are very similar to what we have seen before. The Python and Perl conditional operators work identically in Ruby. Let’s look at an example.
#!/usr/bin/ruby
data = `last`.split("\n")
We begin by running the last command. The last command lists the last logins for the system. We put the last command in ` marks in order to tell Ruby that we want to run that command within the operating system, and then return stdout to the application. The execution returns a string, which we split based on newlines and assign to our data array.
data.each do |l|
if l == ""
elsif l.start_with? "reboot"
elsif l.start_with? "wtmp"
l.rstrip!
users << l[0,8].rstrip
hosts << l[17,16].rstrip.lstrip
Next, we create two empty arrays to store the unique users and hosts that we discovered with the last command. We iterate through each line of our output from last with our for loop and assign each item to the l variable. Then we use an if/elsif/else conditional block to check for different values that we want to ignore. If the line is empty, or if the line starts with reboot or wtmp , we want to skip it; otherwise, we want to process it. These checks are a good example of the Ruby syntax for asking questions about objects. The question mark is a Boolean test which returns true or false based on the value tested. In this case, we are determining if our line starts with certain values, and if it does, we want to skip it.
After each elsif , we fall into our default else statement where we will do our final processing. We want to start by removing trailing spaces. The rstrip method of the String class removes whitespace from the end. Typically, rstrip returns a new string with the spaces missing. In this case, though, we note the ! mark at the end of the line. For some methods, we may want the data to be modified in place. The convention is to add a ! mark to the method name to indicate that it supports in-place modification, and for methods that support it, we can skip creating another object by adding our ! .
We then take advantage of our ability to manipulate strings, using the same syntax we use with arrays, to get specific fields out of our string. First we want the first 8 characters of the string. We take our line, tell it to start with character 0, and take the first 8 characters and create a new string with those 8 characters. Then we take the string that is returned, run rstrip on it, and append that value to our users array. We do the same thing with our hosts field; only we also want to strip spaces off the front. So we use the lstrip in addition to strip the spaces off the left-hand side.
users.uniq!
hosts.uniq!
Once our loop finishes, we will have all the usernames and all the host names that have logged in to our machine. As we don’t want to see each name over and over again (we only want to pull out the user IDs), we will use the uniq function of our array to strip duplicates. Notice the use of the ! to modify each array in place.
Now that we have seen a for loop , let’s look at two other types of loops. For loops would work in each of the next two situations. But we want to see each type of loop.
until users.empty?
print "User: %s\n" % users.pop
We start with an until loop which will continue until our condition returns true . In this case, we will be removing one element at a time in our loop, and we will run until our array is empty. For each iteration, we will pop one element of our array, and then print it.
while not hosts.empty?
print "Host : %s\n" % hosts.pop
Next, we will use a while loop to loop while our array isn’t empty, and print our hosts that way. These two loops are functionally equivalent, but we can see the differences in approach. Which one of these we pick will simply be a matter of choice and esthetics. When we run our application, we should see output similar to Fig. 4.2 .

Figure 4.2 . Running last.rb.
Here is the full code:
David Money Harris , Sarah L. Harris , in Digital Design and Computer Architecture (Second Edition) , 2013
4.2.4 Conditional Assignment
Conditional assignments select the output from among alternatives based on an input called the condition . HDL Example 4.5 illustrates a 2:1 multiplexer using conditional assignment.
2:1 Multiplexer
input logic s,
If s is 1, then y = d1 . If s is 0, then y = d0.
?: is also called a ternary operator , because it takes three inputs. It is used for the same purpose in the C and Java programming languages.
Conditional signal assignments perform different operations depending on some condition. They are especially useful for describing a multiplexer. For example, a 2:1 multiplexer can use conditional signal assignment to select one of two 4-bit inputs.
library IEEE; use IEEE.STD_LOGIC_1164.all;
entity mux2 is
port(d0, d1: in STD_LOGIC_VECTOR(3 downto 0);
s: in STD_LOGIC;
y: out STD_LOGIC_VECTOR(3 downto 0));
architecture synth of mux2 is
y <= d1 when s else d0;
The conditional signal assignment sets y to d1 if s is 1. Otherwise it sets y to d0 . Note that prior to the 2008 revision of VHDL, one had to write when s = ‘1’ rather than when s .

Figure 4.6 . mux2 synthesized circuit
HDL Example 4.6 shows a 4:1 multiplexer based on the same principle as the 2:1 multiplexer in HDL Example 4.5 . Figure 4.7 shows the schematic for the 4:1 multiplexer produced by Synplify Premier. The software uses a different multiplexer symbol than this text has shown so far. The multiplexer has multiple data (d) and one-hot enable (e) inputs. When one of the enables is asserted, the associated data is passed to the output. For example, when s[1] = s[0] = 0 , the bottom AND gate, un1_s_5 , produces a 1, enabling the bottom input of the multiplexer and causing it to select d0[3:0] .

Figure 4.7 . mux4 synthesized circuit
4:1 Multiplexer
A 4:1 multiplexer can select one of four inputs using nested conditional operators .
module mux4(input logic [3:0] d0, d1, d2, d3,
input logic [1:0] s,
assign y = s[1] ? (s[0] ? d3 : d2)
: (s[0] ? d1 : d0);
If s[1] is 1, then the multiplexer chooses the first expression, (s[0] ? d3 : d2) . This expression in turn chooses either d3 or d2 based on s[0] ( y = d3 if s[0] is 1 and d2 if s[0] is 0). If s[1] is 0, then the multiplexer similarly chooses the second expression, which gives either d1 or d0 based on s[0] .
A 4:1 multiplexer can select one of four inputs using multiple else clauses in the conditional signal assignment.
entity mux4 is
port(d0, d1,
d2, d3: in STD_LOGIC_VECTOR(3 downto 0);
s: in STD_LOGIC_VECTOR(1 downto 0);
y: out STD_LOGIC_VECTOR(3 downto 0));
architecture synth1 of mux4 is
y <= d0 when s = “00” else
d1 when s = “01” else
d2 when s = “10” else
VHDL also supports selected signal assignment statements to provide a shorthand when selecting from one of several possibilities. This is analogous to using a switch/case statement in place of multiple if/else statements in some programming languages. The 4:1 multiplexer can be rewritten with selected signal assignment as follows:
architecture synth2 of mux4 is
with s select y <=
d0 when "00",
d1 when "01",
d2 when "10",
d3 when others;
C Programming Essentials
Martin P. Bates , in Programming 8-bit PIC Microcontrollers in C , 2008
Conditional Operations
Where a logical condition is tested in a while, if, or for statement, relational operators are used. One variable is compared with a set value or another variable, and the block is executed if the condition is true. The conditional operators are shown in Table 2.7 . Note that double equals is used in the relational test to distinguish it from the assignment operator.
Table 2.7 . Conditional Operators
Sometimes, a conditional test needs to combine tests on several values. The tests can be compounded by using logical operators, as follows:
Using declarative mappings for automatic code generation from SDL and ASN.1
Nikolai Mansurov , Alexei Ragozin , in SDL '99 , 1999
2 DECLARATIVE VS. IMPERATIVE MAPPINGS
In this section we introduce the general concept of declarative mappings and compare declarative mappings with traditional imperative mappings.
Let’s define some terminology. We consider automatic code generation from a formal specification language (called the source language) onto a high-level imperative implementation-oriented language (called the target language). Examples of source languages are SDL, ASN.1, ACT ONE, TTCN. Examples of target languages are C, C++, Pascal, Modula-2, CHILL. The major challenge of the automatic code generation is to develop a mapping for a given pair of languages. The mapping is a set of interrelated decisions specifying how the constructs of the source language are represented by the target language constructs. When a complete specification in the source language is generated into the target language the corresponding target program should be syntactically and semantically correct and should preserve the meaning of original specification. We distinguish between executable and structural constructs of a language.
Traditional imperative mappings [ 10 ] (in [ 1 ] we called it direct mappings ) can be defined by the following rules:
Executable constructs of the source language, which have semantically close equivalents in the target language, are represented directly by those equivalents (e.g. loops, conditional operators , exact control passing).
Executable constructs of the source language, which don’t have any equivalents in target language, are modeled by groups of target structural and executable constructs. Usually such groups are encapsulated in the library of run-time support. Examples from SDL include remote procedure call, signal input with guard.
Structural constructs of specification languages, which have semantically close equivalents in the target language, are represented directly by those equivalents (e.g. objects, procedures, modules, packages).
Those structural constructs, which have no direct counterpart in the target language (examples in SDL include communication scheme, axioms, timers), are either transformed during translation or modeled using a suitable combination of structural and executable constructs of the target language.
The concept of declarative mappings (in [ 1 ] we called it indirect mappings ) allows to represent semantically distinct structural constructs of the specification language without direct modeling them in the target code. The key idea of a declarative mapping is to use executable statements (directives) as a uniform representation for semantically distant constructs. The generated executable directives are used to control the building of the internal run-time structures for the specified system. This allows to completely separate decisions regarding the appearance of the generated code from decisions regarding the organization of the internal run-time structures. Building of the run-time structures is thus postponed until the start of generated program.
Declarative mappings assume that the execution process for generated program consists of two basic parts: start-up time and run-time. Start-up time is used to perform generated directives and build the internal representation of the system. This internal representation is then used by the support system during the “real” execution.
Generated code for the source specification within a declarative mapping consists of two separate parts:
code which is performed only once at start-up, and
code for executable statements of a source language.
Declarative mappings solve the problem of glue constructs in the generated code [ 1 ]. The composition of structural and executable constructs within the target language programs should satisfy specific syntactic and semantic constraints of the target language. This means that it is not sufficient to design the mapping for each source language construct. The main challenge of the mapping design is to provide glue constructs, which will ensure that all fragments of the target program fit together. Usually syntactic constraints of the target language will lead to a considerable fragmentation of the generated segments [ 1 ]. In our experience declarative mappings allow much more control over the structure of the generated program because this approach uses executable directives which require considerably less glue than any other constructs in a typical target language.
Algebraic Process Verification
J.F. Groote , M.A. Reniers , in Handbook of Process Algebra , 2001
Subject Index
>-convergence, see convergence, progressive
abstract data type, 1154
abstraction, 1169, 1170
non-progressing, 1179, 1199
progressing, 1179, 1199
action name, 1162
alternative quantification, 1165
branching bisimulation, 1198
communication function, 1170
communication merge, 1171
alternative, 1162, 1163
parallel, 1169
sequential, 1162, 1163
Concrete Invariant Corollary, 1175
conditional operator , 1164, 1165
cones and foci, 1176
strong, 1198
weak, 1198, 1199
weak progressive, 1198
progressive, 1201
convergent, 1175, 1179, 1197
Convergent Linear Recursive Specification Principle, 1175
deadlock, 1163, 1164
encapsulation, 1168, 1169
focus condition, 1177, 1179
focus point, 1177
General Equality Theorem, 1177, 1178
idle loop, 1179, 1199
induction, 1159
invariant, 1175
left merge, 1171
clustered, 1200
clustered, 1176
Linear Recursive Definition Principle, 1175
matching criteria, 1177, 1179
pre-abstraction function, 1179
renaming, 1172
solution, 1175
state mapping, 1177
state space, 1173, 1200, 1202
state space reduction, 1202
state transformation, 1173
sum elimination, 1168
sum operator, see alternative quantification
summand inclusion, 1163, 1168
τ-inertness, 1198
τ<-inertness, 1200
τ>, see non-progressing, internal, action
τ<, see progressing, internal, action
TP-reduction, 1203
transition system, 1197, 1200
weak > -confluence, see confluence, weak progressive
Model-Based Testing for Internet of Things Systems
Abbas Ahmad , ... Bruno Legeard , in Advances in Computers , 2018
4.1 MBT Specificities for IoT Conformance Testing
FIWARE uses the open mobile alliance (OMA) NGSI-9/10 standardized RESTful interfaces [ 48 ]. This standardized interface is evolving in parallel with the IoT technology, to be able to take into consideration its novelties. For instance, the OMA released the NGSI interfaces—version 1 (NGSI v1) and FIWARE is aiming to contribute to the standard to release NGSI v2. Thus, it needs to be easy to apply regression testing when the standard evolves. The MBT offers a relatively safe, effective, and systematic way to create regression test suites and new test suites to cover the new functionalities, based on the models [ 49 ].
In addition, RESTful systems communicate over the hypertext transfer protocol (HTTP) with the same HTTP verbs (GET, POST, PUT, DELETE, etc.) that web browsers use to retrieve web pages and to send data to remote servers. Their purpose is to exchange information about the availability of contextual information.
In our context of testing the implementation of the data handling GE, we are interested in applying conformance testing on NGSI-9/10. Moreover, although it is often assumed that the GEs are correctly implemented and are used or are part of the services provided by FIWARE, noncompliance to the FIWARE specifications may lead to several dysfunctional interoperability issues. To ensure the interoperability, the GEs should be thoroughly tested to assess their compliance to these specifications. MBT is considered to be a lightweight formal method to validate software systems. It is formal because it works off formal (that is, machine-readable) specifications (or models) of the software SUT (usually called the implementation or just SUT). It is lightweight because, contrary to other formal methods, such as B and Z notation, MBT does not aim at mathematically proving that the implementation matches the specifications under all possible circumstances. In MBT, the model is an abstraction of the SUT and represents the tested perimeter based on the specifications, which is not necessarily the entire system. As such, it allows to systematically generate from the model a collection of tests (a “test suite”) that, when run against the SUT, will provide sufficient confidence that the system behaves accordingly to the specification. Testing follows the paradigm of not proving the absence of errors, but showing their presence. MBT, on the other hand, scales much better and has been used to test life-size systems in very large projects [ 7 ].
In FIWARE, the MBT conformance model is a representation of the standard. The model includes all the behaviors of the NGSI-v1 and generates the complete suite of test cases that are needed to test for implementation compliance to that standard. Changing an MBT model designed for conformance testing implies that the standard has changed.
In the following sections, we provide an overview of the MBT approach applied for conformance testing of one FIWARE GE implementation.
4.1.1 MBT Model
This approach considers a subset of the UML to develop the MBT models, composed of two types of diagrams for the structural modeling: class diagrams and object diagrams, and OCL to represent the system's behavior. From one MBT model, various test selection criteria can be applied, as shown in Fig. 2 . For this study, we used the Smartesting MBT approach and its test generation tool—CertifyIt, which uses the coverage-based test selection criteria.

Fig. 2 . The MBT workflow.
Tested requirements are manually extracted from the specification. Each of the requirements is than tagged into the model, which serves as a basis to maintain traceability to the specification. Based on the specification information and tested requirements perimeter, the structure of the system is represented in a class diagram, which is a static view of the system limited to elements used for test generation.
The FIWARE class diagram ( Fig. 3 ) is an abstraction of the IoT system:

Fig. 3 . Data handling GE class diagram.
Its entities, with their attributes. The class Sut represents the SUT where things can register to it. The CEP statement CepStatement can also be registered to the Sut and the Sut supports Subscription to its registered things.
Operations that model the API of the SUT. The operation names give a self-explanation of their action, for example, the class registerContext enables a sensor to register itself in the IoT platform.
Points of observations that may serve as oracles are explained in the following paragraphs (for instance, an observation returns the current state of the user's connection to a website).
The class diagram, providing a static view of the SUT, is instantiated by an object diagram. The object diagram provides the initial state of the system and also all objects that will be used in the test input data as parameters for the operations in the generated tests.
It contains the input data based on the partition equivalence principle. The input data are instances of the classes and they are represented in the form of objects, as introduced previously. Each input data is identified by an enumeration, representing an equivalent partition of data from which the test could be derived. For instance, from Fig. 4 , to test the Espr4FastData API, we may consider an initial state of the system with a SUT having nothing connected to it and some entities to be used for registering, creating the CEP statements, subscriptions, etc.

Fig. 4 . Excerpt of the data handling object diagram.
Finally, the dynamic view of the system or its behaviors are described by the object constraint language (OCL) constraints written as pre/postconditions in the operations in a class within a class diagram, as depicted in Fig. 5 . The test generation engine sees these behavioral objects as test targets. The operations can have several behaviors, identified by the presence of the conditional operator , if-then-else. The precondition is the union of the operation's precondition and the conditions of a path that is necessary to traverse for reaching the behaviors postcondition. The postcondition corresponds to the behavior described by the action in the “then” or “else” clause of the conditional operator. Finally, each behavior is identified by a set of tags which refers to a requirement covered by the behavior. For each requirement, two types of tags exist

Fig. 5 . Object constraint language (OCL) example.
@REQ—a high-level requirement
@AIM—its refinement
Both are followed by an identifier. One advantage of the used MBT tool is the possibility to automatically deduct the test oracle. A specific type of operation, called observation, defines the test oracle. The tester with these special operations can define the system points or variables to observe, for instance, a function returns a code. Thus, based on these observations, the test oracle is automatically generated for each test step. The next session provides us an inside view on the test case generation process.
4.1.2 Test Case Generation
Based on the chosen test selection criteria, CertifyIt extracts the test objectives into a test suite, called with the CertifyIt terminology a smartsuite .
In our case study, two smartsuites named EspR4FastData_GETestSuite and UserTestScenarios were created. The EspR4FastData_GETestSuite test suite indicates that the generation should be done for all defined test objectives whereas for the UserTestScenarios_SmartSuite , they are user-defined scenarios of tests to define some very specific cases with the help of the MBT model. Based on the object diagram and the OCL postcondition, the CertifyIt tool automatically extracts a set of test targets, which is the tool comprehensible form of a test. The test targets are used to drive the test generation. As discussed previously, each test has a set of tags associated with it, which ensures the coverage and traceability to the specification. Fig. 6 gives a snapshot of a test in the CertifyIt tool. On the left side, the tool lists all generated tests clustered per covered requirement. On the right side, the test case can be visualized and for each step a test oracle is generated. As discussed, the tester with the observation manually defines the system points to observe when calling any function. Figure, checkResult , observes the return code of each function with respect to the activated requirement. In addition, on the bottom-right of the figure for each test case and test step, it is possible to observe the test targets (set of tags).

Fig. 6 . CertifyIt test case view.
In addition, Fig. 7 illustrates the generated tests with CertifyIt, in exported HTML. More specifically, the shown test covers the behavior that resets the GE implementation using the resetGE function. As discussed previously, each test has a set of associated tags for which it ensures the coverage. The export of this test, as illustrated in Fig. 7 , in the rightmost column, maps to each step the covered requirements or more precisely the test objective tagged by @REQ and @AIM in the model. The export, as shown in the middle column of the figure, contains guidelines for test reification, giving directions on how the abstract test case should be adapted into a concrete script, which is described in the next section.

Fig. 7 . Implementation abstract test case (HTML export).
Within the considered limits of the implementation, the tool extracted 26 “test targets” and generated 22 tests in around 10 s to cover the test targets. Each story in the CertifyIt tool corresponds to one test target. However, one test covers one or more test targets. Moreover, the tool's engine generates fewer tests then test targets, because it uses the “light merge” of test methods, which considers that one test covers one or more test objectives (all test objectives that have been triggered by the test steps). For instance, the test shown in Fig. 6 covers two test objectives. The “light merge” of the tests shortly and on a high-level means that the generator will not produce separate tests for the previously reached test targets.
The generated tests are abstract and to execute them on the SUT, they should be further adapted. For our study, a SoapUI exporter was created, which publishes tests into SoapUI XML projects using the SoapUI library.
4.1.3 Test Case Reification and Execution
In the used MBT approach, to execute tests on the SUT, the activity of test cases reification, also named test case adaptation, is performed first; it consists of creating an adaptation layer to fulfill the gap between the abstract test case generated from the MBT model, the concrete interface, and the initial set of test data of the SUT. As classically required for the test adaptation activities, exporting the abstract test cases (ATS) into executable scripts is the first step to perform, in this case, the ATS are exported into XML files which can be imported and executed on the SoapUI. To illustrate the test adaptation activities, let us consider the following simple test case given in Fig. 7 :
sut.resetGE(INVALIDURL)
-> sut.checkErrorCode () = URL_ERROR
This test has one step that calls the function to reset the data with a URL set to “INVALIDURL.” CertifyIt automatically generates the test oracle, by using an observation operation defined in the model, in our example, it is called “checkErrorCode.” For instance, the expected result of the test is the error URL_ERROR . Further, we created a SoapUI exporter, which from the CertifyIt tool publishes the abstract test cases into concrete SoapUI projects. These projects can be imported and executed on SoapUI.
Fig. 8 shows an example of four executed test cases after importing the SoapUI project. On the left side, the test cases are illustrated. On the right side, it is possible to observe the test case execution status for each step. The green color on a test step represents its successful execution status while the red color represents a failed test step. On the top, a global test pass/fail result is summarized.

Fig. 8 . SoapUI test case launch example with result status.
Quantum Machine Learning
Ivan B. Djordjevic , in Quantum Information Processing, Quantum Computing, and Quantum Error Correction (Second Edition) , 2021
14.9 Grover Algorithm-Based Global Quantum Optimization
The Grover search algorithm, as already explained in Chapter 5, is used to search for an entry in an unstructured database, and provides quadratic speed-up compared to the classical counterpart [ 45 ]. The Grover search operator is given by:
where O is the quantum oracle operator whose action is given by:
with f ( x ) being the search function that generates 1 when the desired item a is found. The action of H ⊗ n on |0〉 ⊗ n states is the superposition state:
so that the Grover search operator can also be represented by:
where G d is known as the Grover diffusion operator . An alternative representation of the oracle operator is to consider it a conditional operator with an ancillary qubit being the target qubit, and the corresponding action of the oracle will then be:
and for | y 〉 = |−〉 = H |1〉 = (|0〉 − |1〉)/√2 we obtain:
The simplified version of the Grover search algorithm is provided in Fig. 14.30 . To get the desired entry we need to apply the Grover search operator ∼( π /4)2 n /2 times, as we have already shown in Chapter 5. The measurement at the end of algorithm will reveal the searched item a with a very high probability.

Figure 14.30 . Quantum circuit to perform the Grover search algorithm.
By redefining the oracle operator, the Grover search algorithm can also be used in the optimization of the objective function f ( x ): {0,1} n → R , as proposed in [ 46 , 47 ], and the corresponding algorithm can be called Grover algorithm-based global optimization . The corresponding minimization oracle operator is given by:
To initialize the oracle operator we randomly select input x 0 and set y 0 = f ( x 0 ) to be a starting point in the algorithm. We also create the superposition state as described earlier. In the i th iteration we apply the Grover search operator G r i times. The output of the Grover algorithm will be state | x 〉, and we then calculate y = f ( x ) and compare to y i . If y < y i we set x i +1 = x and y i +1 = y , which represents the classical step. We then update the threshold in the oracle function, and move to the next iteration, as illustrated in Fig. 14.31 . After approximately O (2 n /2 ) Grover algorithm iterations we measure the upper register to determine the x min . The number of inner loops r i is significantly lower than the number of outer loops 2 n . The inner loops are needed to avoid the system being trapped in a local minimum.

Figure 14.31 . Quantum circuit to perform the Grover search-based minimization algorithm.
EPISTEMIC LOGIC AND INFORMATION UPDATE
Alexandru Baltag , ... Lawrence S. Moss , in Philosophy of Information , 2008
8 CONCLUSION
As we end this chapter, we step back to try to understand what makes this particular subject of epistemic logic and information update what it is. We especially want to compare what is going on here to what is discussed in other chapters, especially Chapters 4c and 3b .
In a sense, our treatment of epistemic phenomena is ultra-semantic . Beginning in Section 2 , we depicted representations and treated them as abstract semantic objects. Even before this, we stated openly that our modeling was slanted towards justifiable belief. This stance implicitly allowed us to ignore reasons to believe and instead focus on models of the phenomena of interest. All throughout our section on examples, we emphasized that one must test models and semantic definitions against intuitions, that the proof of the pudding is in the eating. Indeed, our subject is not a single pudding at all but rather a whole buffet of delectable semantic desserts. We also made it clear that the chefs used an artificial sweetener, relational models, and so those allergic to logical omniscience might prefer the fresh fruit. But except for this, the models work extremely well: the predictions of the logical languages match the intuitions. And one can use the formal tools as a real aid in building representations.
At the same time, our work is unexpectedly syntactic . We saw a series of logical languages crafted to exploit the key semantic features of the models. Whenever one hears about “encoding” in this subject, it is this: the semantic objects quickly become the sites for semantic evaluation in languages which are richer than one might have at first expected. The easiest example is the relational (Kripke) semantics itself. Having a set of Carnapian state descriptions living alone is at this time fairly mundane. Even adding one or more accessibility relation and calling things “possible worlds” does not go far in relating the worlds to one another. But once one has languages with modal operators, statements evaluated at one world in general must refer to other worlds. Thus the worlds really are related: since the logical language has iterated modal sentences, what is true here is in general influenced by what is true far away.
The models in this chapter also incorporate dynamics, social features such as common knowledge, and conditional operators . In each case, the languages are taken to be immediately higher-order: we have knowledge about knowledge, belief about beliefs, announcements about announcements, etc. What makes the subject work is that the formal semantics of the languages refer to the structure of the models, and at the same time the intuitive concepts of interest correspond most closely to statements in the formal languages. One aspect of our work which might be unexpected is the emphasis on particular logical systems for specialized phenomena. We presented a logic of public announcements in Section 5 , but this is just the tip of the iceberg. One can formulate specialized logics for other epistemic actions. The point again is that we have semantic objects corresponding to these actions (this seems to be an innovation coming from this subject) and then the resulting logical systems take on an interest of their own, qua syntactic systems. And on the opposite pole from the specialized logics are the very general ones which incorporate arbitrary actions in some sense: these logical languages are unexpectedly syntactic in the sense that their very formulation is trickier than usual, as is their semantics. But the arrows inside of relational models are the same kind of thing as the arrows between the models, and this is why dynamic epistemic logic works.
One should compare the situation with the belief revision literature surveyed in Chapter 4c . The AGM postulates deal with several operations, most notably revision. These came first, and then later people were concerned with concrete models of them, with representations of theory-change operations, and the like. There is much less of an emphasis on matching the predictions of models to intuitions, mainly because the intuitions are often not as clear, and also because notions like a theory change operation are more abstract than a completely private announcement in our sense. It also took longer for the matter of iterated revision to become central. So the subject developed in a different way from ours. At the same time, there are interesting similarities: as Table 1 in Chapter 4c shows, the history of work in belief revision might be organized according to the particular kinds of prior and posterior belief states discussed. In our subject, the parallel is the extension of the ideas from “hard” semantic updates to “soft” ones (in the terminology of Chapter 3b ). Belief revision theory is a much more active field than dynamic epistemic logic, and so one would expect to see a further push towards varied semantic models. But overall, these parallels could be taken to indicate hidden traces of functionalism in what we are doing, though clearly the emphasis on models and languages here is the most prominent difference.
All of this could be said about other closely related topics, especially work on history-based epistemic systems, interpreted systems, and related models which we surveyed in our temporal reasoning Section 6 .
Another difference between the main thrust of belief revision work and recent trends in epistemic logic is the “social” aspect of the latter area. This is not true of the earliest work in the subject, partly because philosophers have tended to look only at public information. But as one can see from our chapter, the subject is now about public and private types of information change: how they compare and contrast, and how they are integrated in larger theories. This is clearly of interest in mathematical areas of the social sciences, but we feel it is also of interest to philosophy. To be a person is to relate to others, and so to understand knowledge we should pay special attention to multi-agent phenomena.
What connects the ultra-semantic and unexpectedly syntactic are the results on the logical systems themselves. Details of representations often conceal significant conceptual decisions, and results on logical languages and systems can help in the evaluation of different representations. By formulating sound principles, one uncovers (or highlights) hidden assumptions. The matching completeness theorems indicate the right kind of “harmony” (see Chapter 3b ). Even more indicative is the fact that those logical systems typically have axiomatic presentations that make intuitive sense. There is no mathematical reason why the axioms behind logical systems should in any way be “nice.” Frequently they are not. But we would like to regard the happy coincidences of axioms and intuitions in our subject as signposts which indicate that we are on the right track and point the way ahead.
ACKNOWLEDGMENTS
We thank Anthony Gillies, Joshua Sack, and Ignacio Viglizzo for their very useful comments on this chapter at various stages.
Data Gathering, Analysis and Protection of Privacy Through Randomized Response Techniques: Qualitative and Quantitative Human Traits
V.R. Padmawar , in Handbook of Statistics , 2016
2.1 Method of Moments
We first obtain mom estimator for Y ¯ .
Let the conditional mean and variance of Z ri , in (8) , given i , respectively be ν ri and ξ r 2 ; r = 1,2. Then ν 1 i = y i + ν 1 , ν 2 i = x i + ν 2 .
Under SRSWR the sample responses Z 1 , Z 2 ,…, Z n are iid and E Z ¯ = E ( Z 1 ) . Let their common mean and variance respectively be μ ( 9 ) and τ 2 ( 10 ). It is then true that the sample mean Z ¯ ( 5 ) is unbiased for the population mean μ and sample variance S Z 2 ( 6 ) is unbiased for the population variance τ 2 .
We now prove the following results.
Under the proposed model (8) , under SRSWR, Z 1 , Z 2 ,…,Z n are iid with common mean μ and common variance τ 2 given by (9) μ = p Y ¯ + 1 − p X ¯ + p ν 1 + 1 − p ν 2 (10) and τ 2 = − p 2 Y ¯ + ν 1 − X ¯ + ν 2 2 + p σ y 2 + ξ 1 2 − σ x 2 + ξ 2 2 + Y ¯ + ν 1 − X ¯ + ν 2 2 + ξ 2 2 + σ x 2 . Further for p ≠0 (11) Y ¯ ˆ = Z ¯ − 1 − p X ¯ + p ν 1 + 1 − p ν 2 p is an mom estimator for Y ¯ . It is unbiased for Y ¯ with variance τ 2 n p 2 , that is, (12) V a r Y ¯ ˆ = τ 2 n p 2 . Further an unbiased estimator for V a r Y ¯ ˆ is given by (13) V a r ˆ Y ¯ ˆ = S Z 2 n p 2 .
Note that in our framework there are three stages of randomization. At stage one, we use SRSWR to select n respondents. At the next stage, there is randomization to decide whether to report Z 1 i or Z 2 i , 1 ≤ i ≤ n . At the third and final stage, the value of a noise variable W is generated. For computational convenience, let subscript 1 signify the first stage of randomization and subscript 2 * signify the second and third stages of randomization together. Let further E 1 , Var 1 denote the operators at stage 1, and E 2 * , V a r 2 * denote conditional operators at stage 2 * , given stage 1.
It is easy to see that E 2 * Z i = p ν 1 i + 1 − p ν 2 i = p y i + ν 1 + 1 − p x i + ν 2 V a r 2 * Z i = p ξ 1 2 + 1 − p ξ 2 2 + p 1 − p ν 1 i − ν 2 i 2 = p ξ 1 2 + 1 − p ξ 2 2 + p 1 − p y i + ν 1 − x i + ν 2 2 Therefore E 1 E 2 * Z i = p Y ¯ + ν 1 + 1 − p X ¯ + ν 2 E 1 V a r 2 * Z i = p ξ 1 2 + 1 − p ξ 2 2 + p 1 − p E 1 y i + ν 1 − x i + ν 2 2 = p ξ 1 2 + 1 − p ξ 2 2 + p 1 − p V a r 1 y i + ν 1 − x i + ν 2 + p 1 − p E 1 y i + ν 1 − x i + ν 2 2 = p ξ 1 2 + 1 − p ξ 2 2 + p 1 − p σ y 2 + σ x 2 − 2 σ x y + Y ¯ + ν 1 − X ¯ + ν 2 2 and V a r 1 E 2 * Z i = V a r 1 p y i + 1 − p x i + p ν 1 + 1 − p ν 2 = V a r 1 p y i + 1 − p x i = p 2 σ y 2 + 1 − p 2 σ x 2 + 2 p 1 − p σ x y . Now using the identities E Z i = E 1 E 2 * Z i V a r Z i = V a r 1 E 2 * Z i + E 1 V a r 2 * Z i and the fact that under SRSWR E Z ¯ = E Z i and V a r Z ¯ = V a r Z i n we get E Z ¯ = p Y ¯ + 1 − p X ¯ + p ν 1 + 1 − p ν 2 V a r Z ¯ = 1 n ξ 2 + p σ y 2 + 1 − p σ x 2 + p 1 − p Y ¯ − X ¯ 2 . Therefore for p ≠0 Y ¯ ˆ = Z ¯ − 1 − p X ¯ + p ν 1 + 1 − p ν 2 p is unbiased for Y ¯ with variance τ 2 n p 2 , that is, V a r Y ¯ ˆ = τ 2 n p 2 or (14) V a r Y ¯ ˆ = 1 n p 2 − p 2 Y ¯ + ν 1 − X ¯ + ν 2 2 + p σ y 2 + ξ 1 2 − σ x 2 + ξ 2 2 + Y ¯ + ν 1 − X ¯ + ν 2 2 + ξ 2 2 + σ x 2 Finally, since sample variance S Z 2 ( 6 ) is unbiased for the population variance τ 2 , an unbiased estimator for V a r Y ¯ ˆ is given by (15) V a r ˆ Y ¯ ˆ = S Z 2 n p 2 . This completes the proof.
Corollary 1
In particular for p = 1, which corresponds to the Padmawar–Vijayan model ( Padmawar and Vijayan, 2000 ), we get E Z i = μ = Y ¯ + ν 1 and V a r Z i = τ 2 = ξ 1 2 + σ y 2 . so that Y ¯ ˆ = Z ¯ − ν 1 is unbiased for Y ¯ with variance V a r Y ¯ ˆ = ξ 1 2 + σ y 2 n .
Let g : ℝ → ℝ be the function given by g u = b u + c u 2 where c > 0 and b ∈ ℝ . Let u 0 = − b 2 c . Then g u attains its minimum on [ 1 , ∞ ) at 1 or − b 2 c . More specifically,
if u 0 ≤ 1 then g u attains its minimum on [ 1 , ∞ ) at 1.
if u 0 > 1 then g u attains its minimum on [ 1 , ∞ ) at u 0 = − b 2 c .
Observe that ∂ g u ∂ u = b + 2 c u and ∂ 2 g u ∂ u 2 = 2 c > 0 . u 0 = − b 2 c is a solution to ∂ g u ∂ u = 0 . Since c > 0 the function g u is convex on the entire real line ℝ . Thus
Under the proposed model (8) , V a r Y ¯ ˆ in ( 12 ), as a function of p, p ∈ (0,1], is minimized at p = 1.
Note that minimizing V a r Y ¯ ˆ in ( 14 ) as a function of p on (0,1] is equivalent to minimizing g ( u ) = b u + c u 2 , as a function of u , on [ 1 , ∞ ) , with u = 1 p , c = ξ 2 2 + σ x 2 and b = σ y 2 + ξ 1 2 − σ x 2 + ξ 2 2 + Y ¯ + ν 1 − X ¯ + ν 2 2 .
By Lemma 1 , the minimum of g ( u ) on [ 1 , ∞ ) is attained at u = 1 if u 0 = − b 2 c ≤ 1 and at u = u 0 if u 0 > 1. We now show that u 0 = − b 2 c ≤ 1 .
Since c > 0, − b 2 c ≤ 1 is equivalent to − b ≤ 2 c . ⇔ − σ y 2 + ξ 1 2 − σ x 2 + ξ 2 2 + Y ¯ + ν 1 − X ¯ + ν 2 2 ≤ 2 ξ 2 2 + σ x 2 ⇔ − σ y 2 + ξ 1 2 + Y ¯ + ν 1 − X ¯ + ν 2 2 ≤ ξ 2 2 + σ x 2 which is always true.
Thus V a r Y ¯ ˆ is minimized at p = 1.
Corollary 2
In particular, if we take ν 2 = 0 and ξ 2 2 = 0 , that corresponds to the situation when we add noise to the sensitive variable but do not add noise to the innocuous variable.
The above result tells us that in our framework since we are adding noise to true stigmatizing response there are no additional benefits by opting for RR vis-a-vis an innocuous variable with or without noise. The optimal value of p = 1 corresponds to the Padmawar–Vijayan model ( Padmawar and Vijayan, 2000 ).
The estimator Y ¯ ˆ in ( 11 ) is an mom estimator for the population mean Y ¯ in ( 1 ). Apart from point estimators we may also construct confidence intervals. If we are estimating the unknown population proportion then we have to ensure that the estimators belong to the interval 0 , 1 and the confidence intervals are also contained in 0 , 1 . One may also use bootstrap techniques to produce bootstrap intervals.

IMAGES
VIDEO
COMMENTS
It is commonly referred to as the conditional operator, ternary if, or inline if (abbreviated iif). An expression a ? b : c evaluates to b if the value of a
The conditional operator is also known as a ternary operator. The conditional statements are the decision-making statements which depends upon the output of
Since the Conditional Operator '?:' takes three operands to work, hence they are also called ternary operators. Working:
Learn about the C# ternary conditional operator, (`?:`), that returns the result of one of the two expressions based on a Boolean
The conditional operator (a ternary operator), which takes three operands and evaluates either the second or third expression, depending on the
yes, the conditional operator is sometimes referred to as the ternary operator. Why is it called a ternary operator? In the C programming
The conditional (ternary) operator is the only JavaScript operator that takes three operands: a condition followed by a question mark (?)
Conditional operators are used to evaluate a condition that's applied to one or two boolean expressions. The result of the evaluation is either
Conditional operator (also known as arithmetic if,) is a ternary operator · Syntax: expression1 ? expression2 : expression3 · If expression1 is true, then the
?: is also called a ternary operator because it takes three inputs. It is used for the same purpose in the C and Java programming languages. View chapter