C++中带符号类型和无符号类型

摘自《C++ Primer(中文版)》(第五版)

-------仅作为个人学习笔记之用。

//**************************************************************************************************************

带符号类型和无符号类型

      除去布尔类型和扩展的字符型之外,其他整型可以划分为带符号的(signed)  无符号类型(unsigned) 两种。

带符号类型可以表示正数、负数或0,无符号类型仅能表示大于等于0的值。

//*********只有整型才有符号型和无符号型之分,浮点型无此区别

      类型int 、short 、 long 和 long long 都是带符号的,通过在这些类型名前添加unsigned就可以得到无符号类型,

例如 unsigned long 。类型 unsigned int 可以缩写为 unsigned 。

       与其他整型不同,字符型被分为了三种:char 、 signed char 和 unsigned char。特别注意的是:类型 cahr 和 类型 signed char 并不一样。尽管字符型有三种,但是字符型的表现形式却只有两种: 带符号和无符号的。类型char实际上会表现为上述两种形式的一种 ,具体是哪种由编译器决定。

//**************char 并不一定是我们平时默认的那样。。。。

        无符号类型中所有比特都用来存储值,例如,8比特的unsigned char 可以表示0至255区间内的值。

        C++标准并没有规定带符号类型应如何表示,但是约定了在表示范围内正值和负值的最应该平衡。因此,8比特的signed char 理论上应该可以表示-127至127区间内的值,大多数现代计算器实际的表示范围定位 -128 至 127

//***************************************可以理解为:因为把0划分到了无符号类型,所以0+127 = 128.

有意思的代码:

unsigned char c = -1;
signed char c2 = 256;

这两个语句的运行结果是(均假设cahr占8比特):

c的值为255,

c2的值是未定义的。

REASON:

1.当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。例如,8比特大小的unsigned char 可以表示0至255区间内的值,如果我们赋了一个区间意外的值,则实际的结果是该值对256取模后所得的余数。因此,把-1赋给8比特大小的unsigned char 所得的结果是255.

2.当我们赋给符号类型一个超出它表示范围的值时,结果是未定义的(undefined)。此时,程序可能继续工作、可能崩溃,也可能生成垃圾数据。



       

你可能感兴趣的:(C++,自学笔记)