栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言面试题随笔

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言面试题随笔

C语言面试题随笔
	int main()
	{
		char a = 0xA5;
		int c = a;
		printf("%dn", a);
		int b = a >> 4 + 1;
		printf("%dn", b);
		return 0;
	}
输出结果

输出结果为:

-91

-3

原因:0xA5的十进制结果是165。C语言编译器认为是将一个无符号数165存放在一个字节的字符变量a中,但实际上char是有符号的。所以165被当成有符号数对待,结果也就是-91(补码运算的结果)。-3的由来是负数右移运算的结果。

TIPS:

char的值范围可以是-128127或0225。

unsigned char的值范围是0~255。

细品过程

首先将165十进制数转换为二进制数,结果如下:

1010 0101

对其进行补码运算,结果如下:

将正整数的二进制数的所有位取反码然后最低位加1,其结果就是该二进制所有位取1减去该正整数的结果。

正整数的补码为其转化为二进制后的本身,负整数的补码为其转化为二进制后所有位取反,然后加1。

0101 1011

TIPS:91+165的结果是256。

再下来说明左右移运算符。

左移运算符:丢弃高位,低位补0。

右移运算符:负数右移高位补1,无符号负数高位补0。

-91的二进制码:

0101 1011

其反码为:

1010 0101

将其右移5位,高位补1(+运算符的优先级高于>>)

1111 1101

将其取反补1,得到结果:

0000 0010

其十进制数为-3。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号