鱼C论坛

 找回密码
 立即注册
查看: 4485|回复: 10

关于越界问题,求关注

[复制链接]
发表于 2013-2-16 22:40:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>

  2. void main()

  3. {
  4.    int a,b=322;
  5.    float x,y=8.88;
  6.    char c1='k',c2;
  7.    a=y;
  8.    x=b;
  9.    a=c1;
  10.    c2=b;
  11.    printf("%d,%f,%d,%c\n",a,x,a,c2);
  12.   
  13. }
复制代码
其中的c2=b; b值为322,赋值给char类型时越界,越界之后的值为66(用322%256),我一开始按322去ASC码中招一直找不到,视频中也没有越界的介绍就问了老师,老师说赋值给char类型时越界,越界之后的值为66(用322%256),谁可以给我讲下越界?还是用(322%256)什么情况是用的,越界都是这个?,256是什么
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-16 23:11:05 | 显示全部楼层
char只占8个2进制位,322不能用8个2进制位表示,所以将322赋值给char型变量,仅保存低8位2进制位,其它2进制位全部抛弃。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-16 23:37:23 | 显示全部楼层

我记得好像还有个负数的情况吧?取反加一什么的  …… 忘记了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-17 07:35:17 | 显示全部楼层
野蛮酋长 发表于 2013-2-16 23:37
我记得好像还有个负数的情况吧?取反加一什么的  …… 忘记了

负数使用补码表示,不过无论是正数还是负数,溢出的时候一律只取低8个2进制位
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-17 20:15:50 | 显示全部楼层
版主正解    好不容易会一个 还~~~~(>_<)~~~~  就不给菜鸟留个机会啊
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-2-18 21:09:46 | 显示全部楼层
仰望天上的光 发表于 2013-2-16 23:11
char只占8个2进制位,322不能用8个2进制位表示,所以将322赋值给char型变量,仅保存低8位2进制位,其它2进制 ...

是因为前面定义322给char,而char只占一个字节大,322太大所以只能保留最前面的?那不是取214(11010110)这是数吗,这好像也是8位2进制中最大的
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-2-18 21:10:25 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-2-17 20:15
版主正解    好不容易会一个 还~~~~(>_

说下你怎么理解的,我学习下
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-18 21:13:36 | 显示全部楼层
数组 也老是越界, 麻烦谁给我讲讲
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-18 21:14:53 | 显示全部楼层
qq095795 发表于 2013-2-18 21:09
是因为前面定义322给char,而char只占一个字节大,322太大所以只能保留最前面的?那不是取214(11010110) ...

10进制数322转化为2进制数为(101000010)需要9个2进制位表示,char只占8个2进制位,所以保留低8位即(01000010),转换为10进制数为66
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-18 22:27:08 | 显示全部楼层
qq095795 发表于 2013-2-18 21:10
说下你怎么理解的,我学习下

char占一个字节也就是8位 范围就是0~11111111 是吧 二32转换成二进制是101000010 超出范围所以讲101000010(也就是322)付给char时只能保留低8位也就是1000010 换成十进制就是66
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-18 22:28:32 | 显示全部楼层
仰望天上的光 发表于 2013-2-18 21:14
10进制数322转化为2进制数为(101000010)需要9个2进制位表示,char只占8个2进制位,所以保留低8位即(01 ...

版主 我又迟了1小时 麻烦您能不能下手慢点??
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-8 07:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表