int i=289; char c='a'; c=i;
1个回答
关注
展开全部
int i=289 char c='a'; c=i;这个问题,因为char是一个8位的存贮结构,你把一个16位的int的结构赋值给了它,结果只能是把高位的丢掉,所以i被减了256以后赋值给了c,即低位部分赋值给了c你在c='a'时,c存的是97但你后来把i也就是289给了c,所以值溢出了,(为什么这里i被剪掉的是256呢,这个256是怎么算出来的?)
补充:289是10进制 转换到8进制是0000 0441 二进制是100100001 高8位丢掉 也就是 0441 (不明白256咋来的)
回答:这个计算方法不对,289的8进制是04 41二进制是100100001 ,而十六进制为01 21
高8位丢掉不是0441,而是 41,二进制为00100001,而十六进制为21
你把8进制的高8位算错了,它是二进制的高8位,这样就是相当于剪掉了256
追问:嗯,我不太明白低位高位怎么划分 16进制 10进制 8进制 的高位低位(栗子:16进制10 00;10进制40 96;8进制10000 2进制 1000000000000; 16进制和10进制的都是4位 高位低位是前2和后2,8进制是5位 而2进制是9位 怎么区分高位低位?补零么?)
(还有)因为char是一个8位的存贮结构,你把一个16位的int的结构赋值给了它, (这句这里指的8位的存贮结构和16位的存贮结构我不太明白指的是什么)。
补充:在计算机中,实际存储的都是二进制(其它进制都是为了方便人看的)。
所以低高位都是指二进制。
八进制现在很少用了。
而十六进制因为能方便对应二进制就以较常用,二进制的8位正好是它的一位(0~F)。
而十进制是我们实际生活中用的,二进制高8位就对应256(低位的0~7对应的是0~255)。
另外,二进制的位置是从右往左数的,计数从0开始,所以左边的是高位而右边的是低位。
对一个二个字节的类型来说,0~7是低8位,8~15是高8位。
对C语言来说,一个char类型,它只有一个字节,也就是8位。
而int对不同的系统或平台,长度一般是不同的,目前的系统,一般的int为32位(而非16位,16位是古老的系统上用的),所以你说的16位int,估计是你的教材太古老了,至少是20年前的。
C语言有隐式转换,它可以把一个int赋给char,但会自动截断,只留8位。
补充:上面说错了一点,二进制的8位正好是十六进制的二位(00~FF)。
打开CSDN,阅
咨询记录 · 回答于2022-03-29
int i=289; char c='a'; c=i;
int i=289 char c='a'; c=i;这个问题,因为char是一个8位的存贮结构,你把一个16位的int的结构赋值给了它,结果只能是把高位的丢掉,所以i被减了256以后赋值给了c,即低位部分赋值给了c你在c='a'时,c存的是97但你后来把i也就是289给了c,所以值溢出了,(为什么这里i被剪掉的是256呢,这个256是怎么算出来的?) 补充:289是10进制 转换到8进制是0000 0441 二进制是100100001 高8位丢掉 也就是 0441 (不明白256咋来的) 回答:这个计算方法不对,289的8进制是04 41二进制是100100001 ,而十六进制为01 21 高8位丢掉不是0441,而是 41,二进制为00100001,而十六进制为21 你把8进制的高8位算错了,它是二进制的高8位,这样就是相当于剪掉了256 追问:嗯,我不太明白低位高位怎么划分 16进制 10进制 8进制 的高位低位(栗子:16进制10 00;10进制40 96;8进制10000 2进制 1000000000000; 16进制和10进制的都是4位 高位低位是前2和后2,8进制是5位 而2进制是9位 怎么区分高位低位?补零么?) (还有)因为char是一个8位的存贮结构,你把一个16位的int的结构赋值给了它, (这句这里指的8位的存贮结构和16位的存贮结构我不太明白指的是什么)。 补充:在计算机中,实际存储的都是二进制(其它进制都是为了方便人看的)。 所以低高位都是指二进制。 八进制现在很少用了。 而十六进制因为能方便对应二进制就以较常用,二进制的8位正好是它的一位(0~F)。 而十进制是我们实际生活中用的,二进制高8位就对应256(低位的0~7对应的是0~255)。 另外,二进制的位置是从右往左数的,计数从0开始,所以左边的是高位而右边的是低位。 对一个二个字节的类型来说,0~7是低8位,8~15是高8位。 对C语言来说,一个char类型,它只有一个字节,也就是8位。 而int对不同的系统或平台,长度一般是不同的,目前的系统,一般的int为32位(而非16位,16位是古老的系统上用的),所以你说的16位int,估计是你的教材太古老了,至少是20年前的。 C语言有隐式转换,它可以把一个int赋给char,但会自动截断,只留8位。 补充:上面说错了一点,二进制的8位正好是十六进制的二位(00~FF)。打开CSDN,阅
你这是别人的答案,你发别人的答案,我用花钱问你吗