在vc6.0中,printf(“%x",-1)屏幕显示?

如题所述

printf(“%x",-1)显示ffffffff
就是显示-1的补码 算法是正数化成二进制取反加一
-1=-0000000000000001=1111111111111110+1=1111111111111111显示成十六进制就是ffffffff追问

能再详细点吗?不怎么懂!

追答

%x就是显示补码
补码的算法你可以自己百度到很详细的 简单的说就是在二进制的时候取反+1
1的二进制还是1(二进制的算法你也可以自行百度 简单的说就是一直除以2取余数 比如说10转二进制10/2=5余0 5/2=2余1 2/2=1余0 1/2=0余1 余数反着写就是1010) 但VC6里面int是4字节 1个字节8个二进制位的所以有32个二进制位 前面补0就是00000000000000000000000000000001(不好意思前面少打了一半 正确的是32位)每一位取反(0变1 1变0)11111111111111111111111111111110再+1就是11111111111111111111111111111111
但最后显示十六进制 你要把二进制转十六进制 二进制转十六进制可以分成4位4位转 1111 1111 1111 1111 1111 1111 1111 1111,查表或者字节算1111转十六进制是f一共8个ffffffff

温馨提示:内容为网友见解,仅供参考
无其他回答

printf("%x",–1)屏幕显示
VC6.0下输出是ffffffff 这个很正常,-1在电脑里本来就是按照FFFFFFFF来存放的,因为计算机内数字是按其补码来存放的,所以是这个。输出时会自动转换,如果你用%x来输出,是说按其16进制输出,当然就是FFFFFFFF,如果用printf("%d",-1);来输出,就会看到-1了。

visual C++6.0关于printf的问题
-2在内存中用补码表示16位的时候是 0xFFFE,32位是0xFFFFFFFE,所以出现了你输出的情况。

char c = -1; printf("%x\\n",c);为什么是ffffffff而不是ff?
(1)就用VC++6.0建立一个C++工程吧,写上如下代码:(2)然后按下键盘上的F10,进行单步调试运行,右键单击代码区,在弹出的菜单中选择“Go To Disassembly” 进入汇编代码模式:(3)可以看到c的真实内存值哦~!小弟献丑了~! ^ ^

c语言的二进制数值如何直接输出?
1、首先打开vc6.0, 新建一个项目。2、添加头文件。3、添加main主函数。4、定义一个两个数相加的函数binSubtracton。5、在main函数定义int了性number1,number2, binSub。6、使用scanf给变量赋值。7、调用binAddition、binSubtracton。8、使用printf打印结果。

用vc++6.0编译的,问为什么第二个a的结果是37777777777,short不...
因为%d,%o,%x,%u是打印int型的格式符,所以打印的时候会把a转成int型再打印出来,所以变成了4字节。你要打印short型,应该用%hd,%ho,%hx,%hu,就会是2字节了

关于C语言中,short int 的问题。
所以对于short int a来说32767就是它的最大值 32767就是0111 1111 1111 1111它最高位是0 表示正的,当a=32767,b=a+1时0111 1111 1111 1111+1出现了溢出的情况得到1000 0000 0000 0000即-32768 (在2进制中 -1的原码是1111 1111 1111 1111所以你就应该知道)2进制数的-0 和0的区别就是1000...

c语言中以16进制输出时%0x和%x有什么区别?
而用%x作控制的前面用空格补齐。如:\/\/#include "stdafx.h"\/\/If the vc++6.0, with this line.#include "stdio.h"int main(void){ int a=0x37; printf("%04X\\n%4X\\n",a,a); return 0;}输出是:0037 37 若实际数据宽度大于指定宽度,则按实际宽度输出。

如何用c++一个二维数组输入一组随机数 且不重复
举例如下:\/\/#include "stdafx.h"\/\/vc++6.0加上这一行.#include "stdio.h"#include "stdlib.h"#include "time.h"int main(void){ int a[7][7],t[50],i,j,k,x; srand((unsigned)time(NULL)); for(i=0;i<50;t[i]=i++); for(x=50,i=0;i<7;i++) for...

C语言求值问题——再次困惑
这道题有一些问题,我在VC6.0环境下运行,结果用十六进制输出是0xCCCC010A,说明题中只是将低位的两个字节赋值了,而高位的两个字节的值是不确定的.在对x.c[0],x.c[1]赋值之前先对整块内存初始化一下就OK了,程序改为:void main(){ union ss { int i;char c[2];};union ss x;x.i = ...

c语言中,为什么%o输出的总是32位,如short占两个字节,但输出确实32位
\/\/#include "stdafx.h"\/\/If the vc++6.0, with this line.#include "stdio.h"int main(void){ int x=65535; printf("%d %hd\\n",x,x); return 0;}输出应该是65535和-1。所以输出按多少二进制位不是由变量自身决定的,而是由格式化输出字符串决定的。

相似回答
大家正在搜