补码问题求助
在《小甲鱼零基础入门学习C语言》中“第二章 数据类型,运算符和表达式”PPT第12页有如下补码问题:数值是以补码表示的
-10的补码:11110110
那么要是给定:11110110能否这么理解:
表示的数可能是-10(因为此时原码为负数),也可能为246(因为此时原码为正数,正数的补码和原码相同)
第一位为符号位,11110110第一位是1,这个只能表示-10.
如果有二义性,计算机是不能识别的,不会这么傻 拾荒者 发表于 2016-6-13 23:48
第一位为符号位,11110110第一位是1,这个只能表示-10.
如果有二义性,计算机是不能识别的,不会这么傻
谢谢!
不过246的数值表示为11110110,那么11110110究竟是表示246还是表示-10呢? 看是否为无符号,就是unsigned和signed,无符号unsigned int的二进制11110110就是246,如果是有符号int(也可以写成signed int)的二进制11110110就是-10 我上面解释说的11110110是补码的情况
而你给出11110110是作为原码的吧,那么它肯定是无符号了,就是246(不信你将11110110取反加1,不可能等于-10的)
因为有符号的话,一个字节8个位只能表示-128到127,无符号的话能表示0到255
你想令11110110取反加1等于负数的话一个字节是不够的,要加一个字节就是0000000011110110
懂吗{:10_335:} 夜雨de街灯 发表于 2016-6-14 09:48
我上面解释说的11110110是补码的情况
而你给出11110110是作为原码的吧,那么它肯定是无符号了,就是246 ...
谢谢!
我的意思是如果给定一个数的补码是11110110
那么这个数我觉得及可能是246(因为正数的原码也是补码均为11110110),也可能为-10(负数的补码是将该数的绝对值的二进制形式取反后加1)
我这么理解对吗? f904399233 发表于 2016-6-14 22:25
谢谢!
我的意思是如果给定一个数的补码是11110110
那么这个数我觉得及可能是246(因为正数的原码也是 ...
不对,补码是11110110的话(有符号的情况)肯定是-10,246的补码是0000000011110110{:10_324:} 反正你用的int不是8位的 而是16位的,15位是数值为 1位为符号位你说的那个246只能在unsign int中才会出现 zhoushilei 发表于 2016-6-15 11:22
反正你用的int不是8位的 而是16位的,15位是数值为 1位为符号位你说的那个246只能在unsign int中才会出现
哦,明白啦,谢谢!{:5_110:} 夜雨de街灯 发表于 2016-6-15 08:48
不对,补码是11110110的话(有符号的情况)肯定是-10,246的补码是0000000011110110
谢谢,明白鸟~{:5_91:}
页:
[1]