c++ - C语言中各类型数表示范围

浏览:43日期:2023-05-31

问题描述

c++ - C语言中各类型数表示范围我知道在limit.h文件里有对应的类型所能表示的最大最小的范围,例如如下程序.

void printlimits(){ printf('signed char min=%dn',SCHAR_MIN); printf('signed char max=%dn',SCHAR_MAX); printf('signed short min=%dn',SHRT_MIN); printf('signed short max=%dn',SHRT_MAX); printf('signed int min=%dn',INT_MIN); printf('signed int max=%dn',INT_MAX); printf('signed long min=%ldn',LONG_MIN); printf('signed long min=%ldn',LONG_MAX); printf('unsigned char max=%un',UCHAR_MAX); printf('unsigned short max=%un',USHRT_MAX); printf('unsigned int max=%un',UINT_MAX); printf('unsigned long max=%lun',ULONG_MAX); }

在图片上的这个方法~0>>1,如果是8位的话变成,11111111,然后右移移位,变成01111111,转换成负数后应该再减去1才是能表示的最小数吧?数上直接这么写的,难道有什么玄机呢8位不是-128-127吗?

问题解答

回答1:

请直接查阅汇编码

回答2:

对不起,没看清题。那我现在再跟你解释一下,~0>>1 后 为 0111 1111 此时是无符号数,再将它转为 有符号数不变 0111 1111 补码表示 因为是正数也就是 127 取负后 你觉得应该是 -128嘛?

相关文章: