C缺陷拾遗

1.一个采用补码的系统,负数的范围比正数的范围大1。举例如下,

  8位带符号数的取值范围是[-2^7, 2^7 – 1].

  如果n=-2^7,那么-n = ?因此,为了防止出现负值转换为正值时出现的溢出,应该不将负值转换为正值。

  因此,将所有正数转换为负数。同时,增加了一个printneg函数。这个函数打印负数。

2. 负数求余的结果是正,还是负?举例如下,

  -5 % 10 = -5可以,只要-5 / 10 = 0就行。

  -5 % 10 = 5也可以,只要-5 / 10 = -1 就行。

  不同的芯片得出的结果也是不一样的。

  因此,为了保证在任何芯片上求余结果相同,增加了一段处理代码。

null指针并不指向任何对象。除非是用于赋值或比较运算,处于其他任何目的使用null指针都是非法的。

一些C语言实现对内存位置0强加了硬件级的读保护,在其上工作的程序如果错误使用了一个null指针,将立即终止执行。

一些C语言实现对内存位置0只允许读,不允许写。

一些C语言实现对内存位置0既允许读,也允许写

原文地址:https://www.cnblogs.com/moonflow/p/2459654.html