华丽狐狸尾巴颜色:C语言中整型常量的疑问

来源:百度文库 编辑:高考问答 时间:2024/03/29 03:42:14
谭浩强编的《C程序设计》一书中,第三章整型数据一节的第一部分讲到了整型常量的表示方法。提到在C语言中,以0开头的是八进制整数,以0x开头的是十六进制整数,并举了几个例子:
0123相当于十进制的83,-011相当于十进制数的-9
而在这一章后面的习题3.3中,对十进制数进行八进制和十六进制转换,-111换为八进制,给出的答案并不是先把111转成16进制的6f再加负号,即-6f,而是对111的补码进行转换,即写出-111在内存中的形式1111 1111 1001 0010,再转为十六进制的ff92。
我糊涂了,到底应该怎么算?
请问drasimupk :可以写成-6f吗?

NO
答案没有错
因为c语言里面里面8进制跟十六进制都没有负数
当为负数时,直接把负数的补码表示成8或16进制的数
如果你的书是第三版
去看看第76-77页的内容就知道了

十六进制是计算机内的标准表示形式,负数就是有符号数的最高位是1,正数最高位是0,而负数都是以补码表示,将111表示为十六进制是006F,各位取反为FF90,再加1为ff91,你的答案错了。

lanzno说得很精辟。