473,608 Members | 2,667 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Three questions about signed/unsigned type representations

Following a discussion on another thread here... I have tried to understand
what is actually standardized in C++ regarding the representing of integers
(signed and unsigned) and their conversions. The reference should be 3.9.1
(Fundamental types), and 4.7 (Integral conversions).

It seems to me that the Standard doesn't specify:

1) The "value representation" of any of these types, except that (3.9.1/3)
"... The range of nonnegative values of a signed integer type is a subrange
of the corresponding unsigned integer type, and the value representation of
each corresponding signed/unsigned type shall be the same."

2) The conversion from an unsigned type to a signed type when the signed
type can't represent the value.

I have three questions:

1) The cited sentence from 3.9.1/3 is not clear to me. How, for example, the
value representation for int and unsigned int can be the same as they have
different sets of values? Shouldn't this sentence be restricted just to
representations of these values that are common to both types (i.e.
nonnegative ints) ?

2) Am I missing something, or there is really no word in the Standard about
the "value representations " of unsigned types? 3.9.1/4 obviously describes
just the arithmetic laws for unsigned types, but has nothing with their
"value representations ". Imagine we use 2 bits to represent unsigned int,
with the set of values 0-3 and set of bit patterns 00, 01, 10, 11. One would
expect that the following condition is always true:

n == (n & 1) + (n & (1 << 1));

(deliberately mixing arithmetic and bitwise operators). However, what if the
value 1 is represented as 11 and 2 is represented as 00 (does anything in
the Standard preclude such a representation? )? Then 1 << 1 is 2 (i.e. 00),
the first operand of + is equal to n, the second is equal to 00, i.e. 2, and
the result on the right side is actually n+2 (mod 4), not n.

(see also 5.8: operators << and >> are actually arithmetic operators, not
bitwise operators, as they are defined on values, not on representations .
This means that even replacing + with | wouldn't help in some cases).

If this is possible (at least on some weird but conforming implementation of
the Standard), then one could hardly find a portable nontrivial C++ program
in the world.

3) I haven't seen any additional rules for conversions from unsigned to
signed types in case the signed type has the same (or greater - can it
happen with a conforming implementation? ??) number of bits as the unsigned
type, but still can't contain the value from the unsigned type. For
example - conversions from unsigned int to int when the unsigned int value
is greater than INT_MAX... (the opposite conversion is well-defined by
4.7/2). If this is implementation-defined, that would mean, for example:

// -1 is int and is converted to 2^n-1 by 4.7/2
unsigned minusOneUnsigne d = -1;

// implementation-defined, may be -0 on 1's complement machine
int minusOneInt = minusOneUnsigne d;

// modulo 2^n conversion again, but of which value ?
unsigned minusOneUnsigne dAgain = minusOneInt;

- we can't tell what the value of minusOneUnsigne dAgain will be, after a
double conversion.

My question is: does C++ standard specify anything in this case? I can
understand that our minusOneUnsigne dAgain can be 0, after all, instead of
2^n-1, but this seems counterintuitiv e to me.

Regards,
Rade
Jul 22 '05 #1
8 2235
"Rade" <no************ *@btinternet.co m> wrote in message
news:co******** **@hercules.bti nternet.com...
1) The cited sentence from 3.9.1/3 is not clear to me. How, for example,
the value representation for int and unsigned int can be the same as they
have different sets of values? Shouldn't this sentence be restricted just
to representations of these values that are common to both types (i.e.
nonnegative ints) ?
It implicitly is. How could it be saying anything about the representations
of different values?
2) Am I missing something, or there is really no word in the Standard
about the "value representations " of unsigned types? 3.9.1/4 obviously
describes just the arithmetic laws for unsigned types, but has nothing
with their "value representations ". Imagine we use 2 bits to represent
unsigned int, with the set of values 0-3 and set of bit patterns 00, 01,
10, 11. One would expect that the following condition is always true:

n == (n & 1) + (n & (1 << 1));

(deliberately mixing arithmetic and bitwise operators). However, what if
the value 1 is represented as 11 and 2 is represented as 00 (does anything
in the Standard preclude such a representation? )? Then 1 << 1 is 2 (i.e.
00), the first operand of + is equal to n, the second is equal to 00, i.e.
2, and the result on the right side is actually n+2 (mod 4), not n.
The logical operators operate on the arithmetic values of their operands,
irrespective of their representations . 3|5 is 7 regardless of how the values
are represented internally.
(see also 5.8: operators << and >> are actually arithmetic operators, not
bitwise operators, as they are defined on values, not on representations .
This means that even replacing + with | wouldn't help in some cases).

If this is possible (at least on some weird but conforming implementation
of the Standard), then one could hardly find a portable nontrivial C++
program in the world.
Why?
3) I haven't seen any additional rules for conversions from unsigned to
signed types in case the signed type has the same (or greater - can it
happen with a conforming implementation? ??) number of bits as the unsigned
type, but still can't contain the value from the unsigned type. For
example - conversions from unsigned int to int when the unsigned int value
is greater than INT_MAX... (the opposite conversion is well-defined by
4.7/2). If this is implementation-defined, that would mean, for example:

// -1 is int and is converted to 2^n-1 by 4.7/2
unsigned minusOneUnsigne d = -1;
Yes.
// implementation-defined, may be -0 on 1's complement machine
int minusOneInt = minusOneUnsigne d;
If the range of integers includes 2^n-1 (which it probably doesn't), then
minusOneInt will be 2^n-1. Otherwise it's undefined.
// modulo 2^n conversion again, but of which value ?
unsigned minusOneUnsigne dAgain = minusOneInt;
Of whatever value minusOneInthas.
- we can't tell what the value of minusOneUnsigne dAgain will be, after a
double conversion.
Right.
My question is: does C++ standard specify anything in this case? I can
understand that our minusOneUnsigne dAgain can be 0, after all, instead of
2^n-1, but this seems counterintuitiv e to me.


It can probably be anything. In particular, implementations are allowed to
terminate a program that tries to do an unsigned->signed conversion to a
value that won't fit.
Jul 22 '05 #2
Thank you very much for your answers, the points (1) and (3) are now
completely clear to me. I am sorry you answer to (2) has actually raised
more questions that I had before:

"Andrew Koenig" <ar*@acm.org> wrote in message
news:Zs******** ***********@bgt nsc05-news.ops.worldn et.att.net...

The logical operators operate on the arithmetic values of their operands,
irrespective of their representations . 3|5 is 7 regardless of how the
values are represented internally.


I see... That was actually the source of my confusion for the question (2).

But... you can't actually perform bitwise operations on the values, you must
imply some representation. In your example, 3 is implicitly represented as
011 and 5 as 101 and you have 111 which is in turn a representation of 7.

If I understand you properly, the C++ Standard doesn't specify the
*internal* representation of values, but it specifies *this* (let me call it
"implicit" - sorry for introducing nonstandard terms) representation that is
necessary to perform bitwise operations. If this is so, can you tell me
which part of the Standard specifies this "implicit" representation ?

Also, is there an "implicit" representation specified for negative numbers
(as you can perform bitwise operations on signed numbers as well), or it is
"implementa tion dependent" (I would expect the latter) ? If the latter is
the case, is the implementation allowed to terminate the program on
computation of a result of a bitwise operation in some cases?

Particularily, will an implementation that performs bitwise operations on,
say, ints by first converting them (by 4.7/2) to unsigned ints, then
performing the same operations on unsigned ints, and then converting the
result again to int (with a possibility of overflow which results in
terminating the program) be compliant to the C++ Standard?

Regards,
Rade
Jul 22 '05 #3
On Sat, 4 Dec 2004 19:29:36 +0000 (UTC), "Rade"
<no************ *@btinternet.co m> wrote in comp.lang.c++:
Thank you very much for your answers, the points (1) and (3) are now
completely clear to me. I am sorry you answer to (2) has actually raised
more questions that I had before:

"Andrew Koenig" <ar*@acm.org> wrote in message
news:Zs******** ***********@bgt nsc05-news.ops.worldn et.att.net...

The logical operators operate on the arithmetic values of their operands,
irrespective of their representations . 3|5 is 7 regardless of how the
values are represented internally.
I see... That was actually the source of my confusion for the question (2).

But... you can't actually perform bitwise operations on the values, you must
imply some representation. In your example, 3 is implicitly represented as
011 and 5 as 101 and you have 111 which is in turn a representation of 7.

If I understand you properly, the C++ Standard doesn't specify the
*internal* representation of values, but it specifies *this* (let me call it
"implicit" - sorry for introducing nonstandard terms) representation that is
necessary to perform bitwise operations. If this is so, can you tell me
which part of the Standard specifies this "implicit" representation ?


Your statement above is not entirely true. The C++ standard does not
specify the internal representation of many types of objects, but it
does specifically impose some requirements on the representations of
all the integer types, signed and unsigned, specifically in 3.9.1#7
does this:

"Types bool, char, wchar_t, and the signed and unsigned integer types
are collectively called integral types.43) A synonym for integral type
is integer type. The representations of integral types shall define
values by use of a pure binary numeration system.44) [Example: this
International Standard permits 2’s complement, 1’s complement and
signed magnitude representations for integral types.]"

And the explanatory text in footnote 44:

"44) A positional representation for integers that uses the binary
digits 0 and 1, in which the values represented by successive bits are
additive, begin with 1, and are multiplied by successive integral
power of 2, except perhaps for the bit with the highest position.
(Adapted from the American National Dictionary for Information
Processing Systems.)"

The terms "2's complement", "1's complement", and "signed magnitude"
are not themselves defined in the standard. They are better defined
in the 1999 and later versions of the C standard, but C++ is based on
the 1995 C standard. Perhaps they are assumed to be either common
knowledge among programmers, or easily referenced from the source
cited in the footnote or others.

So all integer types must appear to the C++ program the way they do
even if the hardware were somewhat different.
Also, is there an "implicit" representation specified for negative numbers
(as you can perform bitwise operations on signed numbers as well), or it is
"implementa tion dependent" (I would expect the latter) ? If the latter is
the case, is the implementation allowed to terminate the program on
computation of a result of a bitwise operation in some cases?
The 1998 C standard (and later versions with TC1 and TC2 added, so I
suppose it is now actually C 2004), does a much better job of defining
some of these things than either C++ 98 or versions of the C standard
prior to 1999.

Both C and C++ allow for the fact that certain bit patterns in an
object might not represent a valid value for that type. C, from 1999
on, uses the term "trap representation" for such, although C++ has no
specific term.

Uninitialized values might be trap representations , as might be
objects stored via one lvalue (object type) and then accessed as
another type, unless the accessing type is unsigned char. This
applies to misuse of unions, and type punning. Any access of an
object by an lvalue type, if that object does not represent a valid
value for that type, causes undefined behavior.

You could say that this "allows" the implementation to terminate the
program, in the sense that the C++ standard, like the C standard,
places no requirements at all on a program once it generates undefined
behavior.

There are, or more likely were, platforms where bit-wise operations on
signed integer types might produce an invalid representation, thus
causing undefined behavior.
Particularily, will an implementation that performs bitwise operations on,
say, ints by first converting them (by 4.7/2) to unsigned ints, then
performing the same operations on unsigned ints, and then converting the
result again to int (with a possibility of overflow which results in
terminating the program) be compliant to the C++ Standard?
The issue here is covered in 4.7 Integral conversions, particularly
paragraph 3. When you store the value of one integer type, signed or
unsigned, into a different signed integer type, if the actual value is
within the range of the signed type, you get that value. If the
actual value is outside the range of the destination signed type, the
result is implementation-defined. This is not all the same as
undefined behavior, and an implementation that did so would be
non-conforming.

All other cases of out-range-resulst in signed integer types, whether
by calculation overflow or underflow, or by conversion from a floating
point or pointer value, are undefined. But you seem to think that
overflow or any other instance of undefined behavior must terminate a
program, and this is incorrect. Since the C++ standard places no
requirements on a program once undefined behavior has occurred, it is
not required to terminate or have any other specific action or result.
Regards,
Rade


--
Jack Klein
Home: http://JK-Technology.Com
FAQs for
comp.lang.c http://www.eskimo.com/~scs/C-faq/top.html
comp.lang.c++ http://www.parashift.com/c++-faq-lite/
alt.comp.lang.l earn.c-c++
http://www.contrib.andrew.cmu.edu/~a...FAQ-acllc.html
Jul 22 '05 #4
Jack Klein wrote:

Your statement above is not entirely true. The C++ standard does not
specify the internal representation of many types of objects, but it
does specifically impose some requirements on the representations of
all the integer types, signed and unsigned, specifically in 3.9.1#7
does this:

"Types bool, char, wchar_t, and the signed and unsigned integer types
are collectively called integral types.43) A synonym for integral type
is integer type. The representations of integral types shall define
values by use of a pure binary numeration system.44) [Example: this
International Standard permits 2’s complement, 1’s complement and
signed magnitude representations for integral types.]"

And the explanatory text in footnote 44:

"44) A positional representation for integers that uses the binary
digits 0 and 1, in which the values represented by successive bits are
additive, begin with 1, and are multiplied by successive integral
power of 2, except perhaps for the bit with the highest position.
(Adapted from the American National Dictionary for Information
Processing Systems.)"
So its not possible to write C++ on a system using BCD arithmetic ? (Not
that I have ever seen a BCD system :) But you can do BCD arithmetic with
Intel processors if you want to)
The terms "2's complement", "1's complement", and "signed magnitude"
are not themselves defined in the standard. They are better defined
in the 1999 and later versions of the C standard, but C++ is based on
the 1995 C standard. Perhaps they are assumed to be either common
knowledge among programmers, or easily referenced from the source
cited in the footnote or others.

So all integer types must appear to the C++ program the way they do
even if the hardware were somewhat different.
What if I do ~,|,&,^ on the numbers ? Will 1's complement, 2's
complement and signed magnitude give same values ? I believe I read
somewhere that they always act as if 2's complement is used, but I
couldn't find the exact sections in the standard.
There are, or more likely were, platforms where bit-wise operations on
signed integer types might produce an invalid representation, thus
causing undefined behavior.


On such a system, is it possible that bitwise operations on unsigned
integers will result in an invalid representation, thus causing UB ?
Also, am I safe in assuming that bitwise operations are inherently unsafe ?

-Arijit
Jul 22 '05 #5
On Sun, 05 Dec 2004 10:18:29 +0530, Arijit <pa*****@yahoo. co.in> wrote
in comp.lang.c++:
Jack Klein wrote:

Your statement above is not entirely true. The C++ standard does not
specify the internal representation of many types of objects, but it
does specifically impose some requirements on the representations of
all the integer types, signed and unsigned, specifically in 3.9.1#7
does this:

"Types bool, char, wchar_t, and the signed and unsigned integer types
are collectively called integral types.43) A synonym for integral type
is integer type. The representations of integral types shall define
values by use of a pure binary numeration system.44) [Example: this
International Standard permits 2’s complement, 1’s complement and
signed magnitude representations for integral types.]"

And the explanatory text in footnote 44:

"44) A positional representation for integers that uses the binary
digits 0 and 1, in which the values represented by successive bits are
additive, begin with 1, and are multiplied by successive integral
power of 2, except perhaps for the bit with the highest position.
(Adapted from the American National Dictionary for Information
Processing Systems.)"


So its not possible to write C++ on a system using BCD arithmetic ? (Not
that I have ever seen a BCD system :) But you can do BCD arithmetic with
Intel processors if you want to)


One could provide a conforming implementation for such a system if
desired, provided that at least one of it's BCD types held a range of
+/- 2^31. It would be quite inefficient when shifts or bit operations
were used, because the implementation would need to produce the same
result that a true binary representation would.
The terms "2's complement", "1's complement", and "signed magnitude"
are not themselves defined in the standard. They are better defined
in the 1999 and later versions of the C standard, but C++ is based on
the 1995 C standard. Perhaps they are assumed to be either common
knowledge among programmers, or easily referenced from the source
cited in the footnote or others.

So all integer types must appear to the C++ program the way they do
even if the hardware were somewhat different.


What if I do ~,|,&,^ on the numbers ? Will 1's complement, 2's
complement and signed magnitude give same values ? I believe I read
somewhere that they always act as if 2's complement is used, but I
couldn't find the exact sections in the standard.


Absolutely not true that they always act as if 2's complement is used.
The bits change according to pure binary rules, but the new bit
pattern produced has its value interpreted based on the
representation.
There are, or more likely were, platforms where bit-wise operations on
signed integer types might produce an invalid representation, thus
causing undefined behavior.


On such a system, is it possible that bitwise operations on unsigned
integers will result in an invalid representation, thus causing UB ?
Also, am I safe in assuming that bitwise operations are inherently unsafe ?


The unsigned integer types are guaranteed safe under arithmetic, bit
wise, and shift operations, with the possible exception of the
quotient of a division out of range, which is undefined behavior and
some architecture trap in hardware.

All unsigned integer types contain only value bits, and no sign bit.
There are no invalid combinations of value bits in any unsigned
integer type. There are no invalid combinations of value bits in
signed integer types, so long as the value is positive (the sign bit
is not turned on).

--
Jack Klein
Home: http://JK-Technology.Com
FAQs for
comp.lang.c http://www.eskimo.com/~scs/C-faq/top.html
comp.lang.c++ http://www.parashift.com/c++-faq-lite/
alt.comp.lang.l earn.c-c++
http://www.contrib.andrew.cmu.edu/~a...FAQ-acllc.html
Jul 22 '05 #6
Jack, thank you for the clarification.

"Jack Klein" <ja*******@spam cop.net> wrote in message
news:7h******** *************** *********@4ax.c om...
On Sat, 4 Dec 2004 19:29:36 +0000 (UTC), "Rade"
<no************ *@btinternet.co m> wrote in comp.lang.c++: Your statement above is not entirely true. The C++ standard does not
specify the internal representation of many types of objects, but it
does specifically impose some requirements on the representations of
all the integer types, signed and unsigned, specifically in 3.9.1#7
does this:
It does, indeed, except for the highest bit. However, I guess that the
exception is valid only for signed types, i.e. for the unsigned types the
highest bit must bear the value of 2 ^ (n-1). This is somewhat imprecise.
But you seem to think that
overflow or any other instance of undefined behavior must terminate a
program, and this is incorrect.


Not at all. In fact, I would appreciate if there was a compiler switch that
made my favorite compiler create programs that could detect overflows (and
warn somehow, at least in debug builds). Now my compiled programs happily
and silently perform all signed integer computations without any overflow
checks.

Regards,
Rade
Jul 22 '05 #7
On Sun, 5 Dec 2004 11:01:41 +0000 (UTC), "Rade"
<no************ *@btinternet.co m> wrote in comp.lang.c++:
Jack, thank you for the clarification.

"Jack Klein" <ja*******@spam cop.net> wrote in message
news:7h******** *************** *********@4ax.c om...
On Sat, 4 Dec 2004 19:29:36 +0000 (UTC), "Rade"
<no************ *@btinternet.co m> wrote in comp.lang.c++:

Your statement above is not entirely true. The C++ standard does not
specify the internal representation of many types of objects, but it
does specifically impose some requirements on the representations of
all the integer types, signed and unsigned, specifically in 3.9.1#7
does this:


It does, indeed, except for the highest bit. However, I guess that the
exception is valid only for signed types, i.e. for the unsigned types the
highest bit must bear the value of 2 ^ (n-1). This is somewhat imprecise.


There is nothing at all imprecise about it. It is exactly specified.
How can anyone who understands binary values possibly be confused?
But you seem to think that
overflow or any other instance of undefined behavior must terminate a
program, and this is incorrect.


Not at all. In fact, I would appreciate if there was a compiler switch that
made my favorite compiler create programs that could detect overflows (and
warn somehow, at least in debug builds). Now my compiled programs happily
and silently perform all signed integer computations without any overflow
checks.


It is extremely unlikely that a compiler will ever offer that option.
There are analysis tools, most of the quite expensive, that will
attempt to detect this sort of problem.

But you will never see it as part of the language. C++ inherits from
C the principal that you don't pay for what you don't want to use. If
there are places in your code where unexpected values might cause an
out of range problem, write the code to check them yourself. There,
and only there, does the program incur the overhead.

--
Jack Klein
Home: http://JK-Technology.Com
FAQs for
comp.lang.c http://www.eskimo.com/~scs/C-faq/top.html
comp.lang.c++ http://www.parashift.com/c++-faq-lite/
alt.comp.lang.l earn.c-c++
http://www.contrib.andrew.cmu.edu/~a...FAQ-acllc.html
Jul 22 '05 #8
> There is nothing at all imprecise about it. It is exactly specified.
How can anyone who understands binary values possibly be confused?
I am sorry for being so formal. The Standard is obviously written by
engineers, not by lawyers, and I am satisfied even if some definition is
taken from the common knowledge.
It is extremely unlikely that a compiler will ever offer that option.
There are analysis tools, most of the quite expensive, that will
attempt to detect this sort of problem.
This is slightly out of topic, but just to mention: the compiler I was
talking about (VC++ 7.1) actually has a switch (/RTCc) that, if switched on,
checks the conversions from a longer to a shorter type during the runtime.
That is not the same as I was asking for (and also it works in a rather
strange way and I don't like how it works), but illustrates a similar idea.
But you will never see it as part of the language. C++ inherits from
C the principal that you don't pay for what you don't want to use. If
there are places in your code where unexpected values might cause an
out of range problem, write the code to check them yourself. There,
and only there, does the program incur the overhead.


I respect that principle. But I disagree that the sole responsibility for
checks should be on the programmers. (Again OT...) I think that the compiler
is a right place for such an option, because only the machine code generated
by it can benefit from the overflow flags and other similar tools provided
by the target processor. Any check on the language level is rather
cumbersome. Of course, I would like to be able to switch off this option for
the code I want to ship, and I would appreciate a control that is grained at
a finer level than the level of compilation units (actually I wouldn't like
a compiler option, I would like a #pragma, or even better - both!).

Rade
Jul 22 '05 #9

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

Similar topics

4
2623
by: Glen Able | last post by:
Just to get my head straight on this... Firstly, am I right in thinking that right-shifting a signed integer has an undefined result (i.e. could be implemented as a logical or arithmetic shift)? If so, am I also right in assuming that if I right-shift a signed integer by an unsigned integer, the signed value will be promoted to unsigned and the shift will be performed as a logical right shift?
6
14107
by: Sona | last post by:
Hi, What is the difference between a signed 0x00 (NULL, or 0) and an unsigned 0x00? Can there be one? If I do the following: char var; var = 0x00; what should var hold? and if it was an unsigned char, what should it hold then? Thanks
9
4949
by: Fred Ma | last post by:
Hello, I've been trying to clear up a confusion about integer promotions during expression evaluation. I've checked the C FAQ and C++ FAQ (they are different languages, but I was hoping one would clear up the confusion), as well as googling groups and the web. The confusion is that for a binary operator,
4
2649
by: Ken Tough | last post by:
Seems like a simple thing to find out, but I'm struggling. I have googled, but everything I find is about implicit conversion, not explicit. Is this implementation-specific, or does ANSI/ISO lay out what should happen for: -------------------------- signed char sc; unsigned char uc;
27
4534
by: REH | last post by:
I asked this on c.l.c++, but they suggested you folks may be better able to answer. Basically, I am trying to write code to detect overflows in signed integer math. I am trying to make it as efficient as possible without resorting to assembly language, and without causing undefined behavior. That, of course, means catching the overflow before it happens. What I asked was (stripping any relevance to C++):
11
2662
by: Frederick Gotham | last post by:
I'd like to discuss the use of signed integers types where unsigned integers types would suffice. A common example would be: #include <cassert> #include <cstddef> int CountOccurrences(unsigned char const val, unsigned char const p,
10
3289
by: =?iso-8859-2?B?SmFuIFJpbmdvuQ==?= | last post by:
Hello everybody, this is my first post to a newsgroup at all. I would like to get some feedback on one proposal I am thinking about: --- begin of proposal --- Proposal to add signed/unsigned modifier to class declarations to next revision of C++ programming language
7
5036
by: somenath | last post by:
Hi All, I am trying to undestand "Type Conversions" from K&R book.I am not able to understand the bellow mentioned text "Conversion rules are more complicated when unsigned operands are involved. The problem is that comparisons between signed and unsigned values are machine- dependent, because they depend on the sizes of the various integer types. For example, suppose that int is 16 bits
6
6443
by: Kislay | last post by:
Consider the following code snippet unsigned int i=10; int j= - 2; // minus 2 if(i>j) cout<<"i is greater"; else cout<<"j is greater"; Since i is unsigned , j is greater . I know why , but vaguely . Can
0
8050
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
7987
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
1
8130
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
8324
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
6805
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
0
5471
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
3954
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
4015
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
2464
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system

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.