c语言的short类型转换为long类型是零位扩展还是符号扩展?为什么?

c语言的short类型转换为long类型是零位扩展还是符号扩展?为什么?,第1张

符号扩展。

1、符号扩展:当用更多的内存存储某一个有符号数时,由于符号位位于该数的第一位,扩展之后,符号位仍然需要位于第一位,所以,当扩展一个负数的时候需要将扩展的高位全赋为1;对于正数而言,符号扩展和零扩展是一样的,因为符号位就是0。

比如一个用一个8位二进制表示-1,则是10000001

如果把这个书用16位二进制表示时,则为11111111 10000001 高位全都是1,这个叫做符号扩展,主要用于对其 *** 作数。

2、零扩展就是全补零。不论其符号位是多少,高8位全都补0.

#include<stdio.h>

void expand( char *s1, char *s2 ) {

    while( *s2 = *s1 ) {

        char prev = *( s1 - 1 ),

             curr = *s1,

             next = *( s1 + 1 )

        if( curr == '-' &&prev <next ) {

            char c = prev + 1

        

            while( c <next )

                *s2++ = c++

            --s2

        }

        ++s1

        ++s2

    }

}

int main( ) {

    char in[99],

         out[99]

    gets( in )

    expand( in, out )

    printf( "%s\n", out )

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12068242.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存