为什么 a = 2;a = ~a;输出为什么是-3

char a=2;

a=0000 0010

~a的意思是取反,取反操作是按bit取反,0变1,1变0,这个操作与符号位无关

~a=1111 1101

它表示出来的是补码!!

补码解释成原码:按原变补顺序逆序操作,即,

先-1为:1111 1101-1=1111 1100

再取反码:符号位不动,数值位取反

1111 1100反码:1000 0011

第一位是符号位,余位为数值

第一位1表示负数

0011=2+1=3

故结果为-3

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.编译程序(1)gcc xx.c,他会默认生成一个a.out的可执行文件,在a.out所在目录,执行./a.o...
    萌面大叔2阅读 1,321评论 0 1
  • 1.编译程序 (1)gcc xx.c,他会默认生成一个a.out的可执行文件,在a.out所在目录,执行./a....
    萌面大叔2阅读 500评论 0 1
  • C语言基础 编译程序 gcc xx.c,他会默认生成a.out的可执行文件,在a.out所在目录,执行./a.ou...
    帅碧阅读 644评论 1 3
  • 网站乱码问题我们会经常碰到,大多见于非英文的中文字符或其他字符乱码,而且,这类问题常常是因为编码方式问题,主要原因...
    波段顶底阅读 2,962评论 1 9
  • 怕错过你生活的每一天 如此偷偷摸摸一直惦念 自己都嘲笑自己太犯贱 习惯为你的欢乐点赞 默默的悲伤你的哀愁 无数次点...
    白日呓语阅读 936评论 0 3