社区
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;
}
废话不多说了,高手看看吧!给分析分析!
...全文
209
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
【深搜】纯洁的皇后
题目:纯洁的皇后 rqnoj672 题目描述 当年弱弱的ALEJ刚学会pascal的时候,HSW已叱咤机房很久了。有一天,ALEJ小朋友怀着一颗CJ的稚嫩心灵向HSW请教八皇后的
问题
。ALEJ:“八皇后怎样解啊,HSW?”HSW:“嘿嘿嘿,八皇后可以扩展为N皇后呢,嘿嘿嘿”ALEJ:“那N皇后怎么解呢,HSW?”HSW:“嘿嘿嘿……嘿嘿嘿……嘿嘿嘿嘿……嘿嘿嘿嘿嘿……嘿嘿嘿……嘿……...
YOLOv5的Tricks | 【Trick1】关于激活函数Activation的改进汇总
如有错误,恳请指出。在yolov5模型搭建的过程实现中,额外实现了很多非常新奇有趣的激活函数,不再是的简单nn.ReLU等,所以这里使用这篇笔记来对这一些列的激活函数进行总结归纳。关于激活函数,在很早之前我写过一篇笔记介绍,笔记链接:激活函数与Loss函数求导,在这里主要介绍的是目标检测yolov5算法中实现的一些的激活函数,主要设计ReLU函数及其变体,包含ReLU,PReLU,RReLU,FReLU,Swish,Mish,Acon系列,Dynamic ReLU系列。ReLU相比之前的 Sigmoid/t
神经网络中激活函数比较
对于训练神经网络来说,为了增强网络表征数据的能力,一般需要引入非线性激活函数,一般有sigmoid tanh relu,今天我们就来分布说明一些这些激活函数的特点。
神经网络中激活函数比较--转载
本文的内容主要参考guoyuhaoaaa的博客,链接:https://blog.csdn.net/guoyuhaoaaa/article/details/53006516对于训练神经网络来说,为了增强网络表征数据的能力,一般需要引入非线性激活函数,一般有sigmoid tanh relu,今天我们就来分布说明一些这些激活函数的特点。 总而言之层数越深relu的优势越明显。(故一般而言sigmoid...
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章