我是一个高三毕业生,最近在学习C语言,遇到一点困难,希望各位高手能够指教一二。
1。为什么引如补码后,二进制计算会有不同效果?能够消除符号位影响?原理?
2。电脑使进制变十六进制是先变二进制再变十六进制的吗?
3。C中的10个0。1累加精确相加,不等于1,那不比计算器还差吗?
4。OxfffL与Oxffff相等吗?为什么?
5。那些原码,补码和偏移码需要懂得笔算吗?要学到什么程度才行啊?
第1个问题比较复杂.这里只简单的说一下:
补码的本质是把数轴的原点移到了最大整数的一半,所以在它全是正数,运算时没有负数.
因此没有符号位的问题.
它的好处是加减运算都可以一步完成.
第2个问题
计算机中没有数的进制概念,它只处理二进制数.
进制换算只是程序的一种算法,它可以采取你所说的方式,也可以采用其它方式.
第3个问题
二进制的0.1不等于十进制的0.1.
(十进制)0.1 = (二进制) 0.11111.... = (十进制)0.05 + 0.025 + 0.0125 + 0.00625 + .... != (十进制)0.1
所以计算机不能精确表达数学意义上的0.1(无限精度).它只能保证其误差(精度)在某个范围内.
在实际生活中,精度都不是无限的.有个故事,说英国的海岸线是不可测量的,因为如果用更小的尺子测量,
结果会变大.
第4个问题
0xfffL(三个f)当然不等于0xffff(四个f).
不过0xffffL == 0xffff. 原因是计算机比较时有保持精度的习惯,
如果两个数据的长度(精度)不一样,它会把较小的精度扩大到较大的精度.
第5个问题
最少要能口算加减法.会笔算乘除法.
数据不必要大.32以内即可.
口算64以内的十进制数到十六进制的转换.
熟记二进制到16进制转换.