mdsk.net
当前位置:首页 >> unsignED输出结果 >>

unsignED输出结果

输出结果为65534或者4294967294 因为在不同位的操作系统下,数值的表示位数是不一样的.首先我们先明确一点:在计算机中,正数用原码来计算(正数的原码、补码、反码都是一样的);负数是用补码来计算的.至于原因可以参考一下文

printf("unsigned int=%d\n,char=%d\n",sizeof( unsigned int),sizeof(char)); 格式化字符串只能有一个, 去掉中间那个分号就可以了. 你这个相当于把"char=%d\n"字符指针作为unsinged int输出了

结果应该是:a=32768因为a是无符号的整数,用unsigned定义的后面输出用%d表示整形量

虽然 a 和 b 定义为 unsigned,无符号整数,但是格式字符串是 "%d",属于 int 型的,所以仍然会输出有符号整数. 输出的结果会因系统和编译器而异.估计本题用的是 turbo c,int 是2个字符,16个位元,输出会是: 0,32768 (如果在 int 是4个字符,32个位元的系统,就会输出:65536,32768)

输出结果是a=65535vc6中,int是4字节标识的,65535即0xFFFF,只有两个字节,可以被正常表示

用U输出就可以了,d是整数,有符号,u是无符号数: unsigned int tmp; tmp = -1; printf("%u", tmp);参考格式符:类型码 含义b 解释为整数并作为二进制输出c 解释为整数并作为字符表示输出(ASCII码)d 解释为整数并作为整数输出e 解释为浮点数输出f 解释为双精度并作为浮点数输出o 解释为整数并作为八进制数输出s 解释为字符串并为字符串输出u 解释为无符号整数输出g 解释自动选择合适的表示法p 解释为指针的值x 解释为整数并作为带有小写字母a-f的十六进制数输出X 解释为整数并作为带有大写字母A-F的十六进制数输出

根据题目的设计, 应该是16位机,即int占2字节.这样 在赋值 m=32768=0x8000; 最高位为1 按照%d输出,会把最高位作为符号位,所以实际输出的是-32768 下面答案应该是打错了.

在计算机系统中,数值一律用补码来表示,-3的补码为原码:1000 0000, 0000 0000, 0000 0000, 0000 0011 取反:1111 1111, 1111 1111, 1111 1111, 1111 1100 加1 :1111 1111, 1111 1111, 1111 1111, 1111 1101所以转为unsigned后补码为11111111111111111111111111111101,而正数的补码即原码,所以原码一样,即 4294967293

其实很简单,你得明白C语音的函数参数入栈顺序,默认是从右向左,也就是说参数列表中的最后一个在栈底,而第一个参数在栈顶,所以第一个printf其实执行顺序是: (1)a 所以输出的是16,此时a=16; (2)a=(a>>2)所以输出的是4 ,此时a=4; (3)a>>2 所以输出的是1,此时a=4; 第二个printf类似: (1)a 所以输出是16,此时a=16; (2)a=(a>>2)所以输出是4,此时a=4; (3)a/2 所以输出是2,此时a=4;

虽然 a 和 b 定义为 unsigned,无符号整数,但是格式字符串是 "%d",属于 int 型的,所以仍然会输出有符号整数. 输出的结果会因系统和编译器而异.估计本题用的是 Turbo C,int 是2个字符,16个位元,输出会是: 0,32768 (如果在 int 是4个字符,32个位元的系统,就会输出:65536,32768)

5689.net | zdly.net | gmcy.net | zxwg.net | 2639.net | 网站首页 | 网站地图
All rights reserved Powered by www.mdsk.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com