C语言:整形存储

cs 复制代码
#include<stdio.h>
int main() {
	char a = -1;
	signed char b = -1;
	unsigned char c = -1;
	printf("a=%d,b=%d,c=%d", a, b, c);
	return 0;
}

b与a都是有符号数结果一样。a的signed相当于省略了。

运行结果

整形提升:整形算术运算总是以至少以缺省整型类型的精度来进行的,为了获取这种精度,表达式中的字符和短整型操作数在使用之前转换为普通整型,这种转换称为整型提升。

整形提升时有符号数高位补符号数,无符号数补高位0。

截断:-1是int型占4个字节,char占一个字节(-128~127)(8bit),将-1赋值给char会发生截断现象。将32位(4个字节)截断成8位(1个字节)。

cs 复制代码
#include<stdio.h>
int main() {
	char a = -128;
	printf("a=%u", a);
	return 0;
}

运行结果

注意:是打印无符号数,而不是a是无符号数,整形提升时按照有符号数进行提升。无符号数没有原码,补码,反码的概念,直接将内存中的补码按照无符号数转换成十进制。

cs 复制代码
#include<stdio.h>
int main() {
	int i = -20;
	unsigned int j = 10;
	printf("%d\n", i+j);
	return 0;
}

运行结果

注意:%d是有符号数。

相关推荐
keyborad pianist几秒前
Web开发 Day1
开发语言·前端·css·vue.js·前端框架
坚持就完事了1 分钟前
Python的类型注解
开发语言·python
wjs202411 分钟前
HTML URL 编码
开发语言
wjs202416 分钟前
Lua 循环
开发语言
Evand J25 分钟前
matlab GUI制作界面的一些笔记(入门)
开发语言·笔记·matlab
我是大猴子26 分钟前
Java面经
java·开发语言
Never_Satisfied34 分钟前
在c#中,如何删除字符串中的第x个字符
开发语言·c#
_nirvana_w_36 分钟前
Qt项目链接库时遇到的坑:-l选项的正确用法
开发语言·c++·qt·qt框架·elawidgettools
froginwe1139 分钟前
数据访问对象模式(Data Access Object Pattern)
开发语言
我命由我1234540 分钟前
Visual Studio - Visual Studio 修改项目的字符集
c语言·开发语言·c++·ide·学习·visualstudio·visual studio