电子商务网站开发与设计,网站没被收录,技术支持骏域建设网站,seo外包公司排名文章目录 一、C语言基本数据类型溢出 二、存储原理符号位原码反码补码补码操作的例子 三、赋值中的类型转换常见返回类型——巨坑总结 一、C语言基本数据类型 溢出
因为数据范围#xff08;即存储单元的位的数量#xff09;的限制#xff0c;可以表达的位数是有限的。 溢出… 文章目录 一、C语言基本数据类型溢出 二、存储原理符号位原码反码补码补码操作的例子 三、赋值中的类型转换常见返回类型——巨坑总结 一、C语言基本数据类型 溢出
因为数据范围即存储单元的位的数量的限制可以表达的位数是有限的。 溢出分为正溢出和负溢出原理都是相近的。 溢出会发生截断将从右往左数超过数据范围的位全部丢弃。 就会出现最大的正数1就变成了最大的负数这种情况或者最小的负数-1变成了最大的正数。 例
//程序结果为
int main()
{ unsigned char a, b, c, d;a 30;b a;c a;d 10*(a);printf(%d %d %d\n, b, c, d);
}正确答案为30 32 64 主要说下D正常算d320超uchar了 320表示1 0100 0000 发生截断0100 0000 为64
二、存储原理
符号位
用二进制 0 代表正数二进制 1 代表负数。用第一个一个二进制位单独代表符号
原码
符号位加上整数的绝对值的组合。
反码
是每个二进制位变为相反的值。 正整数的反码是原码本身。 负整数是要处理的其中符号位的 1 不参加反码处理符号位以外的各个位都要按位取反。
补码
如果是正整数那么补码还是原码本身。可如果是负整数则在上一个反码的基础上再补加一个二进制的 1 最终计算机存储起来的是补码后的结果。
补码操作的例子
补码存储这点很重要做题时候很多时候就会忘。
比如-1的原码理论上应该是1000 0001但是在计算机中应该是1111 1111补码存储 还有那个~x-x-1公式中这个-x指的也是补码。 例如-1的~x是0000 0000而-x0000 0001则-1即为答案。
例
//以下代码的执行结果是().
int main(){int i-2147483648;return printf(%d,%d,%d,%d,~i,-i,1-i,-1-i);
}正确答案为2147483647-2147483648-21474836472147483647 解释 -2147483647补码为1000 0000 0000 0000 0000 0000 0000 0001 -1 补码为1111 1111 1111 1111 1111 1111 1111 1111 -2147483648补码为1000 0000 0000 0000 0000 0000 0000 0000 溢出 则 ~i就是 0111 1111 1111 1111 1111 1111 1111 1111 即为2147483647
-i为--21474836482147483647 1 2147483647补码为0111 1111 1111 1111 1111 1111 1111 1111 1 补码为0000 0000 0000 0000 0000 0000 0000 0001 1000 0000 0000 0000 0000 0000 0000 0000 又是-2147483648
1-i为 -i 1 即为1000000 00000000 00000000 00000001 求一下源码发现是-2147483647
-1-i为1000000 00000000 00000000 00000000 11111111 11111111 11111111 11111111 得01111111 11111111 11111111 11111111 为2147483647
再例 正确答案为
三、赋值中的类型转换
如果赋值运算符两侧的类型不一致但都是数值型或字符型时在赋值时自动进行类型转换。
将浮点型数据(包括单、双精度)赋给整型变量时舍弃其小数部分。将整型数据赋给浮点型变量时数值不变但以指数形式存储到变量中。将一个double型数据赋给flout变量时要注意数值范围不能溢出。字符型数据赋给整型变量将字符的ASCII码赋给整型变量。将一个int, short或long型数据赋给一个char型变量,只将其低8位原封不动地送到char型变量发生截断。有符号数与无符号数相加有符号就会变成无符号数
例
//求count的值
int func()
{int count 0;unsigned int a 1;int b -5;while (b 5){if (a b 5){count;}}return count;
}正确答案5 考点在于有符号数与无符号数相加有符号就会变成无符号数 负数转成无符号数结果等于这个负数加上无符号数的模。 -4为11111111 11111111 11111111 11111100 无符号是4294967295其实就是有符号上限*21肯定大于5 直到-1为11111111 11111111 11111111 11111111 此时count3 此时1溢出为0000000 00000000 00000000 00000000小于5了 再直到5和6这两次count为5
再例 正确答案为 常见返回类型——巨坑
有些题不明显给通过函数和一些关键字隐含很容易掉坑 比如sizeof返回类型size_t。也就是unsigned int。 getchar返回类型int。 函数的隐含储存类型是extern,函数的形参或变量的储存类型为auto 除法运算符 “/” 两边参加运算对象都是整数运算结果要取整 % 整除取余数运算二个运算数必须是整型。 函数值类型的定义可以缺省此时函数值的隐含类型是int
…待补充
总结
这就是我大概的理解有点像我平时摞书最近常看的书放到最顶上不长看的书就慢慢放到底下了。