社区
C语言
帖子详情
负数问题再次缠绕着我!
yiruirui0507
2010-08-03 11:46:35
int main()
{
char a[1000];
int i;
for(i=0;i<1000;i++)
{
a[i]=-1-i;
}
printf("%d",strlen(a));
return 0;
}
废话不多说了,高手看看吧!给分析分析!
...全文
182
16
打赏
收藏
负数问题再次缠绕着我!
int main() { char a[1000]; int i; for(i=0;i<1000;i++) { a[i]=-1-i; } printf("%d",strlen(a)); return 0; } 废话不多说了,高手看看吧!给分析分析!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yiruirui0507
2010-08-03
打赏
举报
回复
[Quote=引用 8 楼 erorr 的回复:]
strlen遇到\0就认为结束了,\0二进制就是0
-128之后就截断了,-129 = 127,-130 = 126,然后到-256正好是0
[/Quote]
请问这里能分析详细点吗?我就是想知道为什么 -129 = 127,-130 = 126;
自己是这样分析的:-129 129表示形式 1 0000 00001 高位舍去 0000 00001
然后取反 1111 1110 加1 1111 1111 所以-129在内存中的表示形式:1111 1111
0xff 这那里是0x7f(127)啊,明显是个负数,而且是-1 ,我那里分析错了?指点ING......
xuxian02092213
2010-08-03
打赏
举报
回复
strlen返回字符串长度是以\0为结束符的,char到了255就是0x0ff,再往上就是0了,重头开始,那么长度就到此为止。你可以将char a[1000]换成int 或者是long
小楫轻舟
2010-08-03
打赏
举报
回复
楼主可以断点调试啊
a[127] = -128 二进制是 10000000
a[128] = 127 二进制是 01111111
Erorr
2010-08-03
打赏
举报
回复
strlen遇到\0就认为结束了,\0二进制就是0
-128之后就截断了,-129 = 127,-130 = 126,然后到-256正好是0
zecard_fu
2010-08-03
打赏
举报
回复
因为-1-255 取最后两位等于0了唄!
printf("%d\n", (-1-255)&0xff);
运行上面就知道了!
ayw215
2010-08-03
打赏
举报
回复
i从0 到1000
如果a[i]越界,会截取低8位给a[i]
「已注销」
2010-08-03
打赏
举报
回复
char型在接受int型数值的时候最多只支持256位,即-128~127(无符号型则是0~255)
结果应该是256
Learn-anything
2010-08-03
打赏
举报
回复
strlen得到的是字符串的长度,如果其中0的字符,他就认为字符串结束
你的赋值中道255时的值为0,所以是255长度
yiruirui0507
2010-08-03
打赏
举报
回复
[Quote=引用 1 楼 lightboat09 的回复:]
a[255] = '\0'
[/Quote]
我也知道a[255]=0啊,问题是当i=-129的时候情况是则么样呢?会发生越界,这个时候数据又如何表示呢?
给详细一点,最鄙视故做潇洒装B的人了!希望你不是!
ayw215
2010-08-03
打赏
举报
回复
[Quote=引用 1 楼 lightboat09 的回复:]
a[255] = '\0'
[/Quote]
所以字符串长度为255
小楫轻舟
2010-08-03
打赏
举报
回复
a[255] = '\0'
yiruirui0507
2010-08-03
打赏
举报
回复
哦,原来高位舍去之后,还是以新的高位为符号位啊,晓得了!
fancanqin
2010-08-03
打赏
举报
回复
学习。。。。
zxk860611
2010-08-03
打赏
举报
回复
:-129 129表示形式 1 0000 00001 高位舍去 0000 00001是因为它只有8位
这时,最高位,也就是左边第一个0仍然被认为是符号位,所以取反0111 1110 加1 0111 1111,即127
[Quote=引用 11 楼 yiruirui0507 的回复:]
引用 8 楼 erorr 的回复:
strlen遇到\0就认为结束了,\0二进制就是0
-128之后就截断了,-129 = 127,-130 = 126,然后到-256正好是0
请问这里能分析详细点吗?我就是想知道为什么 -129 = 127,-130 = 126;
自己是这样分析的:-129 129表示形式 1 0000 00001 begin_of_the_skype_high……
[/Quote]
小楫轻舟
2010-08-03
打赏
举报
回复
写错了,
按16位算的话,
-129 的补码是 1111 1111 0111 1111
小楫轻舟
2010-08-03
打赏
举报
回复
按16位算的话,
-129 的补码是 1111 1111
截位后是 0111 1111 = 127
负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
注意不是先加1后取反
http://blog.csai.cn/user1/14480/archives/2006/3741.html
OSChina 周五乱弹 ——什么情况下两个人之间的距离能成为
负数
我所有口袋都没有! 先挂了呀!!! ---- ---------分割线-------------- ---- 男朋友在供房,男朋友的闺密也在供房, 要是他们俩在一起,就只需要一套房, 剩下几百万可以随便花,太可怕了…… ...
你不知道网络安全有多严峻
随着大数据、AI(人工智能)与互联网络的高速发展新的网络安全
问题
变得越来越严峻,自己身边时不时总有人被网络诈骗,为了更少的人被攻击写了这些文字。 一、网络安全形式严峻 我国从事网络与电信诈骗人数:...
Wireshark tcptrace图关于丢包重传细节图解
确实,关于CUBIC,我只说了缠绕,关于BBR我只说了顺延,并没有说具体如何,甚至我没有提一嘴关于重传的细节,更别说在图示里展现了。这是我的错。话不能说一半,因此才写下本文,把另一半也写出来。 炒股的人喜欢...
稻盛和夫 活法
但是社会却弥漫着颓废、悲观的氛围,甚至有人甘愿成为丑闻的主角,甚至犯罪。为什么如此闭塞的状况充斥着整个社会?那难道不是因为很多人找不到活着的意义和价值,迷失了人生的方向吗?造成这种状况的
电机专题(直流有刷、无刷电机,步进电机……)超详细!!!
电机专题 文章目录电机专题1. 初识电机1.1 电机简介1.2 电机分类1.3 各类电机简介2. 驱动直流有刷电机2.1 H桥驱动电路分析2.2 引入PWM脉冲调制2.3 代码部分3. 编码器3.1 编码器简介3.2 编码器的分类3.3 编码器参数4....
C语言
70,026
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章