473,385 Members | 1,409 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,385 software developers and data experts.

Sign preserving Vs value preserving

Dear all,

I was going through the book "C a software engineering approach by
darnell & Margolis" there was a section named sign preserving vs value
preserving

it is as follows

sign preserving rule:-
when signed and un signed objects meet in an expression, the result is
always unsigned

ex:- if a is an unsigned short whose value is 2,then the expression
a - 3 evaluates to a very large un signed value rather than
the signed value of -1

value preserving rule:-

This method converts unsigned chars and unsigned shorts to
int,assuming that the int type is larger than unsigned char and
unsigned short respectively. if int is not larger the object is
converted to unsigned int

assuming 16-bit shorts and 32-bit ints in the previous example,
a would be converted to int rather than unsigned int,so the result of
the expression would be -1

note that the difference between sign-preserving and value-preserving
rules only becomes manifest when an unsigned type is shorter than
int.

if both operands are unsigned ints, the result is unsigned, so that
the expression 2u-3u always evaluates to a large unsigned value

1) how valid is the above explanation?

2)is there any implementation where the int type is smaller in size
when compared to unsigned short and unsigned char?

3)Does the condition

sizeof(short) <= sizeof(int) <= sizeof(long)

always holds in ANSI-C ? or is it true for unsigned values ?
Dec 5 '07 #1
3 3268
On Dec 5, 1:44 pm, sophia.ag...@gmail.com wrote:
Dear all,

I was going through the book "C a software engineering approach by
darnell & Margolis" there was a section named sign preserving vs value
preserving

it is as follows

sign preserving rule:-
when signed and un signed objects meet in an expression, the result is
always unsigned
true
if both operands are unsigned ints, the result is unsigned, so that
the expression 2u-3u always evaluates to a large unsigned value
To be precise, its value is equal to UINT_MAX
1) how valid is the above explanation?
valid.
2)is there any implementation where the int type is smaller in size
when compared to unsigned short and unsigned char?
no, because your 3) is true
3)Does the condition

sizeof(short) <= sizeof(int) <= sizeof(long)

always holds in ANSI-C ? or is it true for unsigned values ?
yes.
Dec 5 '07 #2
vipps...@gmail.com wrote:
sophia.ag...@gmail.com wrote:>
I was going through the book "C a software
engineering approach by darnell & Margolis" there was
a section named sign preserving vs value preserving

it is as follows

sign preserving rule:-
when signed and un signed objects meet in an expression,
the result is always unsigned

true
No, it's false. Let's look at the OP's (snipped) example.

"ex:- if a is an unsigned short whose value is 2, then
the expression a - 3 evaluates to a very large un signed
value rather than the signed value of -1"

It depends on whether an unsigned short promotes to int
or to unsigned int, and that depends on whether unsigned
short values can be represented by an int.

If USHRT_MAX <= INT_MAX, then the value is -1, otherwise
unsigned short promotes to unsigned int and the value is
UINT_MAX.
if both operands are unsigned ints, the result is
unsigned,
Unless by ints you mean integers. Arithmetic on two
unsigned short values may be signed or unsigned for
reasons stated above.
so that the expression 2u-3u always evaluates to a
large unsigned value

To be precise, its value is equal to UINT_MAX
1) how valid is the above explanation?
valid.
No, it's invalid. If you've been fooled it's probably
because unsigned short has the same width as unsigned
int on the implementations you've seen.
2)is there any implementation where the int type is
smaller in size when compared to unsigned short and
unsigned char?
No addressable type is smaller than a character type.
The standard has rules on the values that are representable
by types of the same signedness but different rank. It
has rules that the unsigned integer must be able to
represent all the non-negative values of it's signed
counterpart (same rank.)

It does not talk about the byte size of the representations
beyond imposing implicit minimums based on how many value
(and sign) bits are required to support the minimum range.
no, because your 3) is true
No, 3) is not necessarily true.
3)Does the condition
sizeof(short) <= sizeof(int) <= sizeof(long)
[Assuming a mathematical relation, rather than C's <=...]

always holds in ANSI-C ? or is it true for unsigned values ?

yes.
No. The standard allows sizeof(short) sizeof(int). All it
requires is that SHRT_MAX <= INT_MAX and INT_MIN <= SHRT_MIN.

You're not likely to find an implementation where shorts are
larger than ints, but the standard doesn't exclude them.

--
Peter
Dec 5 '07 #3
what about this result

when an integer value x is converted to a smaller unsigned integer
type, the result is the non negative remainder of

x/(U_MAX+1)

where U_MAX is the largest number that can be represented in the
shorter unsigned type.

i checked it using the following program

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
int main(int argc, char* argv[])
{
unsigned short j;

j = 71124;
printf("\n USHRT_MAX = %d",USHRT_MAX);
printf("\n j = %d",j);
printf("\n ......... = %d",(71124) % (USHRT_MAX+1));

puts("");
return(EXIT_SUCCESS);
}

I got the o/p as

USHRT_MAX = 65535
j = 5588
......... = 5588
Dec 7 '07 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
by: johndesp | last post by:
I am building an xml document to represent a url request. Some urls contain d equal signs appended to the url. Its important I preserve the equal sign in hte xml document. However, my parser is...
12
by: tarmat | last post by:
sorry for this silly little question, but whats the function to grab the sign of a value?
4
by: gimme_this_gimme_that | last post by:
Hi, I Oracle one can have : select to_char(a_id_seq.nextval,'0000') from dual Which fetches a sequence value and pads it with zeros on the left. When the sequence value is more than 4...
34
by: Christopher Benson-Manica | last post by:
I'm trying to compute the absolute value of an integer using only bitwise operators... int x; sscanf( "%d", &x ); printf( "%d\n", (x^((~((x>>31)&1))+1)) + ((x>>31)&1) ); That works, but it...
8
by: Fred L. Kleinschmidt | last post by:
I need to know the largets value representable in a variable. However, I do not know the variable's true type - only that it is some kind of int. It may be any of the following: #typedef Newtype...
2
by: Sheldon Simms | last post by:
I would like to portably extract the components of a floating point value: sign, exponent, and significand. Based on the C floating point model described in 5.2.4.2.2, I came up with the following...
16
by: TTroy | last post by:
Hello, I'm relatively new to C and have gone through more than 4 books on it. None mentioned anything about integral promotion, arithmetic conversion, value preserving and unsigned preserving. ...
14
by: TTroy | last post by:
Hello, can anyone explain why the following function will not work for INT_MIN: /* itoa: convert n to characters in s */ void itoa(int n, char s) { int i, sign; if((sign = n) < 0) /*...
18
by: Sven | last post by:
Hi, I found a strange behaviour when using the time() function from time.h. Sometimes when it is called, it does not show the correct time in seconds, but an initial value. This time seem to be...
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.