| 
 
 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; // 正确:转换执行,且确实丢失了部分值  
 
                
                
                
        
    
 
 |