字符串按f(p)=p*11 mod 256替代,若计算后的值小于等于32,则该字符不变
下面两个程序运行后产生不同的结果,而程序只有极小的差别,不知道是什么原因?这样的程序到底该怎么写
程序一:
#include<stdio.h>
main()
{
char s[10]="china";
char t;
int i;
clrscr();
for(i=0;i<5;i++

展开全部
收起
3回答
提交回答
  • 至过去的我

    2044人对此回答表示赞同

    我是未来的你,你现在是不是在年找寻小程序答案。你不要感觉诧异,给你来信原因,就是让你不在后悔。今天去学习如何推广小程序,相信......点击查看更多>
    发布于
  • 夏日未央

    6人对此回答表示赞同

    其中的t和s[i]*11%256并不等价;由下面的程序可以看出来。
    #include<stdio.h>
    main()
    {
    char s[10]="china";
    char t;
    int i;
    for(i=0;i<5;i++)
    {
    t=s[i]*11%256;
    printf("%d\t%d\n",t,s[i]*11%
    展开
    6
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • 情深深

    5人对此回答表示赞同

    if(t<=32)

    t是字符型,只占8位,最高位为符号位,当i=2时,s[i]*11%256的值是131,二进制最高位是1,所以系统将它解释为一个负数-125,所以t<=32成立,所以就不会执行s[i]=t,i=3时情况也相同,所以没有修改原来的元素值。

    if(s[i]*11%256<=32)
    s[i]是字符型,而11和256都是整型,所以s[i]将进行整型提升,类型自动转换为整型,整型至少点16位(现在的系统中都是32位),所以
    展开
    5
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • 张与其

    1人对此回答表示赞同

    看到了匿名的达人了。

    忽视了char,我以为你用的是int。

    失误了,不过,真是正解。

    谢谢你的例子,让我们再次看到类型转换的重要性!
    展开
    1
    0回复
    发布于 6年前

    评论(0)

    收起评论

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
咨询热线

13312967497

扫码添加业务即可随时咨询 还可领取小程序推广攻略

业务咨询: 13312967497
扫码咨询

扫码咨询套餐

回到顶部