第一个概念:常量和常量表达数的区别 127常量 -127 是常量表达式
用int32位来表达很大的数如-212324324324234 由于 212324324324234已经越过了边界了,所以它会转为unsigned long 类型 那么就是- ul的情况了这个是会自动装换的 有点像-1u=2(32)-1是个正数了 那么-***********就转为+***********了,这个数就变了。
这个漏洞会出现在很大地方:特点是如果无符号数是负数那这个数就变了。
(int i=0 ;i<len-1;i++){}
如果len是unsign型 那么了len-1是unsign型 如果len为0时那么 len-1是-1u那么这个数就很大了 循环将会很大
由于strlen()在宏中定义的是unsign类型 那么不要用 strlen(c)-strlen(b)来进行字符串的比较这样会有漏洞:如果是负数那就和自己想象得不一样了。
#define INT_MAX -2147483648 #define INT_MAX -2147483647-1 是正确的。没有转型 是个代替形式 如: INT_MAX
int ch_i=INT_MAX;
cout<<INT_MAX<<"*************";//结果为:2147483648 因为-2147483648被转化成ul类型所以等于2147483648
cout<<ch_i<<"*************";//结果为: -2147483648 因为2147483648 用强制转为int型越界了,所以为-2147483648
计算机存放数据的形式是以补数形式来进行储存的。