32768强制转换成short类型和char类型为什么是-32768和0?
强制类型转换相关
- 1. 代码如下(C语言)
- 2.为什么32768用short类型强制转换后变成-32768?
- 3.为什么32768用char类型强制转换后变成0?
- 相关链接
以下内容基于系统为32位,64位也行
1. 代码如下(C语言)
#include <stdio.h>
int main(){short a=(short)(32768);char c = (char)(32768);printf("%d\n",a);//-32768printf("%d\n",c);//0
}
2.为什么32768用short类型强制转换后变成-32768?
- 易知short类型的范围为-32768~32767
- 32768用二进制表示为:1000 0000 0000 0000
- 由于short类型占2字节=16位,因此转换时,系统会查看这16位的数。我们知道,16位二进制数可以表示2^16个编码,而在补码中零的编码只有一个,也就是补码中会比原码多一个编码出来,这个编码就是1000000000000000,因为任何一个原码都不可能在转成补码时变成1000000000000000。所以,人为规定1000000000000000这个补码编码为-32768。
3.为什么32768用char类型强制转换后变成0?
- 易知char类型的范围为-256~255
- 32768用二进制表示为:1000 0000 0000 0000
- 由于char类型占1字节=8位,因此转换时,系统会只查看最后8位,因此得0000 0000,相当于将32768%256,得到的余数就是转换后的结果。显然结果为0
- 如果用32769那么就会得到1。 想一想为什么?
相关链接
- short的范围讲解,以及补码,原码。(转载)
32768强制转换成short类型和char类型为什么是-32768和0?相关推荐
- Cityscapes数据集转换成COCO类型和VOC类型
本来想用本数据集拿来做基线测试,突然发现gtFine里面没有适合我小白看的xml或txt 十分痛苦 看了许多帖子 终于找到一位好心博主整理的内容 按照流程应该最后成功了 想必从coco转成其他数据类型 ...
- 数据库中的字段varchar类型和char类型的区别?
数据库中的字段varchar类型和char类型的区别? 目录 数据库中的字段varchar类型和char类型的区别?
- java char和int的区别_int类型和char类型的区别
下面三个定义式的区别: int i = 1;char i = 1;char i = '1'; int用来定义整型变量,char用来定义字符型变量,要清楚的知道三个定义式的区别,可以比较它们在内存中的存 ...
- byte类型和char类型
byte字节类型是JAVA中最小的数据类型,它在内存中占8位,取值范围从-128到127, 赋值:byte i = 127; 注:byte型在赋值时,一旦超过127或小于-128,则会产生编译错误. ...
- c语言char数字转int补位,关于char强制转换成int到底是用0还是用1补位的猜想与检验...
关于char强制转换成int到底是用0还是用1补位的猜想与检验 最近学C语言发现char强制转换时值会完全不同,而且变化很大,于是决定写代码测试一下. 先检验一下char型的-3和3在内存中分别怎么表 ...
- 打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )
此文章参考<深入理解计算机系统>P31. 先看如下代码: 12345的十六进制表示为:0x00003039 1 #include <stdio.h> 2 3 int main ...
- Java学习(4)—— 布尔类型、基本数据类型转换、基本数据类型和String类型的转换
布尔类型 也叫Boolean类型,boolean只允许取true和false. boolean占一个字节. 适用于逻辑运算,流程控制语句. 有默认类型,是false.但是应该声明为成员变量或是静态变量 ...
- C语言Socket编程为什么要将sockaddr_in强制转换成sockaddr?
在阅读尹圣雨<TCP/IP网络编程>(C语言示例)的时候,看到将sockaddr_in类型的struct的指针强制转换成了sockaddr类型的指针. 比如hello_client.c: ...
- java 父类强制转换为子类_[java]Java中父类强制转换成子类的原则
Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用. 例: public class Test { public static void main(Str ...
- C#里氏转换,子类赋值父类,父类强制转换成子类的理解
C#里氏转换,子类赋值父类,父类强制转换成子类的理解 最近在学习C#,在父类和子类的学习上有不理解的地方. Father f = new Son(); 这样的一个实例化程序中,内存时怎么样处理的,为什 ...
最新文章
- 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- 【Google Play】声明广告权限 ( you must declare the AD_ID Permission when your app targets Android 13 )
- Redis实现发布与订阅(转)
- 京东ajax怎么用,使用Ajax、json实现京东购物车结算界面的数据交互实例
- shop--8.店铺管理页面的开发
- 从“Liskov替换原则”和“Refused Bequest”看“正方形为什么不能继承长方形”
- DNSlog注入思路
- php的变量命名规则
- ClickHouse Kafka引擎表 Application maximum poll interval ... leaving group
- linux基础 linux命令跟踪 strace命令
- 我国OLED技术和OLED显示屏的发展历程
- 【微信小程序】微信小程序开发学习记录
- 如何使用“MRT”恶意软件删除工具
- 解决谷歌翻译不能使用的问题
- CLI 钱包操作(十):订阅设置
- HashMap夺命连环问,你扛得住吗
- Oracle alter table
- GitHub 标星 167k!你要的优质书籍这都有,还开源!
- 如何在Windows上创建,解压,更新.tar.gz压缩包
- 随机森林算法及其实现(1)