C语言基础题:d1=~a的意思不就是按位取反么?不就是把0变1,1变0么?为啥又负数补码还原求原码
答案:1 悬赏:0 手机版
解决时间 2021-01-10 01:33
- 提问者网友:兔牙战士
- 2021-01-09 08:22
C语言基础题:d1=~a的意思不就是按位取反么?不就是把0变1,1变0么?为啥又负数补码还原求原码
最佳答案
- 五星知识达人网友:行路难
- 2021-01-09 08:56
~a表示将a按位取反,a是一个变量 , 至少要有1个字节(char),而一个字节有8位!
计算机中存储的整数,都是按补码存放的,规定:正数的补码与原码相同,负数的补码为其原码的反码+1。 所以,当a是负数时,计算~a的结果是要求补码的。
如:
char a=7 ; (00000111)
~a = 11111000
转换成原码为:
反码:11111000 - 1 = 11110111
原码:10001000= -8追问
您举例的最后一步是+1吧就是~是按位取反的意思,当我按位取反后,第一位符号位是1,也就是说明此数是负数,那这个解析怎么又给取反再+1呢?好晕啊(⊙o⊙)追答我举例的是从补码转成原码,所以,要先减1
请上机练习,去体会结果。
你书上-1的计算写的好象有问题(少了一个0)!
书上是另一种计算方法(将补码取反,再加1:结果是相同的,但过程不合理)
计算机中存储的整数,都是按补码存放的,规定:正数的补码与原码相同,负数的补码为其原码的反码+1。 所以,当a是负数时,计算~a的结果是要求补码的。
如:
char a=7 ; (00000111)
~a = 11111000
转换成原码为:
反码:11111000 - 1 = 11110111
原码:10001000= -8追问
您举例的最后一步是+1吧就是~是按位取反的意思,当我按位取反后,第一位符号位是1,也就是说明此数是负数,那这个解析怎么又给取反再+1呢?好晕啊(⊙o⊙)追答我举例的是从补码转成原码,所以,要先减1
请上机练习,去体会结果。
你书上-1的计算写的好象有问题(少了一个0)!
书上是另一种计算方法(将补码取反,再加1:结果是相同的,但过程不合理)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯