社区
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;
}
废话不多说了,高手看看吧!给分析分析!
...全文
193
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写文章
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 周五乱弹 ——什么情况下两个人之间的距离能成为
负数
2019独角兽企业重金招聘Python工程师标准>>> ...
你不知道网络安全有多严峻
上周六受到企业的邀请讲网络安全,这篇博客是内容的整理。 随着大数据、AI(人工智能)与互联网络的高速发展新的网络安全
问题
变得越来越严峻,自己身边时不时总有人被网络诈骗,为了更少的人被攻击写了这些文字。 一、网络安全形式严峻 我国从事网络与电信诈骗人数:160万 我国去年网络与电信涉案金额:1152亿 大学生防网络与电信诈骗合格数不足:30%(其它人群估计
负数
了) 网络与电信诈骗的...
Wireshark tcptrace图关于丢包重传细节图解
上周六写了《在Wireshark的tcptrace图中看清TCP拥塞控制算法的细节(CUBIC/BBR算法为例)》,收到一封邮件,说我文中的图示画错了。 确实,关于CUBIC,我只说了缠绕,关于BBR我只说了顺延,并没有说具体如何,甚至我没有提一嘴关于重传的细节,更别说在图示里展现了。这是我的错。话不能说一半,因此才写下本文,把另一半也写出来。 炒股的人喜欢看K线,并且
稻盛和夫 活法
稻盛和夫 活法前面的话身居乱世之中,重新审视“活法”我们现今生活在纷乱如麻、前途未卜的“不安分的时代”。富裕却不知足,丰衣足食却礼节不周,充分享受自由却倍感闭塞。只要有干劲,就什么东西也可以得到,任何梦想也可以实现。但是社会却弥漫着颓废、悲观的氛围,甚至有人甘愿成为丑闻的主角,甚至犯罪。为什么如此闭塞的状况充斥着整个社会?那难道不是因为很多人找不到活着的意义和价值,迷失了人生的方向吗?造成这种状况的
曾有一个人,爱我如生命(3)
第十一章 一切都已结束, 不再藕断丝连。 我最后一次拥抱你的双膝, 说出令人心碎的话语。 一切都已结束, 回答我已听见, 我不愿再一次将自己欺骗。也许,往事终会将我遗忘, 我此生与爱再也无缘。 ---------------------------------------普希金《往事》 那些天我不知道是怎么熬过来的,什么事都做不下去,也无法正常入眠,整晚坐在窗...
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章