类型的解读

 

#include<stdio.h>
int main(void)
{
  int	a = -1;
  unsigned b = 0;
  printf("%s\n", (a - b > 0) ? "yes" : "no");
  printf("%d\n", a - b);
  printf("%u\n", a - b);

  return 0;
}

//因为我是先做完了后面几道再来做的,所以我要说又了XD
//之前在看16位汇编的时候我深有体会,所有的东西不过就是数字罢了
//这个东西到底是什么,取决于怎么看待它
//比如这个a=-1,它在内存中就是-1的补码
//b就是0,没有什么sign,unsign之分
//但是如果认为最高位是符号位,那么a就是-1
//如果认为最高位就是普通的数字,那么a就是-1的补码
//所以a-b这个东西在内存中的数字时一样的
//对数据的理解不同,使用它的指令就不同
//a-b>0时,编译器把他们都认为是unsigned,所以它在运行时的指令就是没有符号的运算方法
//而后面用%d输出时,指令就会是有符号位的指令,所以显示出-1
//同理,用%u输出时,相对的指令就是不把最高位当符号的指令
//写到后面都是瞎yy的,可能错误百出~~~

说点什么

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒