社区
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;
}
废话不多说了,高手看看吧!给分析分析!
...全文
176
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 周五乱弹 ——什么情况下两个人之间的距离能成为
负数
我所有口袋都没有! 先挂了呀!!! ---- ---------分割线-------------- ---- 男朋友在供房,男朋友的闺密也在供房, 要是他们俩在一起,就只需要一套房, 剩下几百万可以随便花,太可怕了…… ...
Wireshark tcptrace图关于丢包重传细节图解
确实,关于CUBIC,我只说了缠绕,关于BBR我只说了顺延,并没有说具体如何,甚至我没有提一嘴关于重传的细节,更别说在图示里展现了。这是我的错。话不能说一半,因此才写下本文,把另一半也写出来。 炒股的人喜欢...
你不知道网络安全有多严峻
随着大数据、AI(人工智能)与互联网络的高速发展新的网络安全
问题
变得越来越严峻,自己身边时不时总有人被网络诈骗,为了更少的人被攻击写了这些文字。 一、网络安全形式严峻 我国从事网络与电信诈骗人数:...
笔记之密码学
// 选中我即将抽取的代码,按快捷键Ctrl + Alt + M String encryptKaiser = encryptKaiser(orignal,key); System.out.println("加密:" + encryptKaiser); String decryptKaiser = decryptKaiser(encryptKaiser,key...
骨灰级的魔兽伤害计算(包括物理和…
首先是我们常见的攻防对照表,这里要注意的是用WorldEdit作图,默认的参数设置是TFT1.07的数据,而大部分作图的人不会去考虑这个
问题
,所以在RPG图中,如果没有改过平衡性参数,那么法术攻击对英雄的伤害是75%的...
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章