c语言中整数赋值和字符赋值的一些问题

来源:互联网 发布:基于python.的毕业设计 编辑:程序博客网 时间:2024/05/18 11:32
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)。
0 0
原创粉丝点击