c++中对于将一个超出指定类型范围的的数赋给该类型对象,编译器将进行怎样的处理?
书中提到:
对于unsigned类型,例如 unsigned char的范围是0—255,将336存储到unsigned char中,实际赋值为80,即为336对256取模;将-1存储到unsigned char中是合法的,但实际中unsigned char 存储的是255,即为 -1对256的取模值。
对于signed类型,则是由编译器决定的。
先介绍一下取模运算的定义:(另外提一下取模和取余基本上是一样的,只是取模多用于计算机术语,而取余更多倾向于数学)
给定一个正整数p,任意一个整数n,一定存在等式 :
n = kp + r ;
其中 k、r 是整数,且 0 ≤ r < p,则称 k 为 n 除以 p 的商,r 为 n 除以 p 的余数。
在vc++6.0上运行时分别有以下情况:
1、unsigned char num=-1;输出num的结果为255。
2、unsigned char num=-286;输出num的结果为226。
3、unsigned char num=365;输出num的结果为109。(这种情况会有warning提示,以上两种则没有任何错误信息提示)
由于软件原因 对于signed赋值先不进行讨论,另外对于余数不同语言或计算器也有不同的定义和结果。