1.当一个算术表达式中既有无符号数又有int值时,那个int值就会转换成无符号数 例如:
unsigned u = 10; int i = -42; std::cout << u + i << std::endl;
2.当赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数 例如:
unsigned char(8位)可以表示0~255区间的值,但如果我们赋了一个区间外的值,比如-1,则实际的结果是该值对256取模后所得的余数,因此,-1赋给unsigned char后打印显示为255
其中,-1对256的求模运算为: -1 / 256 = 0…-1,(趋向于负无穷) 易与求模运算混淆的为求余运算,感兴趣的可以去查查二者的区别。
3.signed short int 与 unsigned short int
这两者之间运算时,有符号数并不会转化为无符号数再去做运算
4.signed与unsigned
对于浮点数,前缀符signed与unsigned不能加在float类型或double类型上,实际上,浮点数本身都是有符号数
5.默认情况下,十进制字面值是带符号数,八进制和十六进制字面值既可能是带符号的也可能是不带符号的
如果我们使用了一个形如-42的负十进制字面值,那个负号并不在字面值之内,它的作用仅仅是对字面值取负值而已
6.初始化和赋值是两个完全不同的操作
初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代
7.列表初始化: 例如:
int unuts_sold = 0; int unuts_sold = {0}; int unuts_sold{0}; int unuts_sold(0);
注意:
long double ld = 3.1415926536; int a{ ld }, b = { ld }; // 错误:转换未执行,因为存在丢失信息的危险 int c( ld ), d = ld; // 正确:转换执行,且确实丢失了部分值
|