忧默的小男孩 2022-02-13 23:30 采纳率: 94.4%
浏览 103
已结题

c语言中int的范围为什么是-32768到32767?

一直以来都没搞懂,百度也不懂,希望大神能给我讲讲。假设int分配2个字节,就是16位,第16位表示正负 即1000 0000 0000 0000 第一位可以是0或1 第二位也一样..一直到第15位 所以一共是2的15次方+2的14次方...一直加到2的1次方 共32768, 又因为第一位最小是0,所以0-32767 就是32768个数 (正数我懂) 那么负数呢?不应该也是0到-32767吗? 为什么书上写的是 -32768~32767呢? 不应该是 -32767~32767吗? 负数的第一位,-0等于0啊

  • 写回答

6条回答 默认 最新

  • 当代纠结伦 2022-02-14 03:25
    关注

    int 在内存中以补码的方式存在,且默认是有符号的,计算范围符号位为1的需要要转化为原码(其实都要转换,只不过符号位为0时原反补相同),转换方法减一取反。
    要注意的:
    1000 0000 0000 0001 -1=1000 0000 0000 0000 取反 1111 1111 1111 1111表示为-32767
    1000 0000 0000 0000 -1 在计算机中检测到后不会做这个运算,而是默认为-32768
    如果输入超出这个范围的如:32768
    超出范围时,会以无符号的形式存入,但输出时是以有符号的形式输出
    0111 1111 1111 1111(32767)+1=1000 0000 0000 0000以无符号存入, 输出以有符号形式,转换为原码就是-32768(如上)
    int 是占四个字节,如果要测试的话,用short int(两个字节)
    你的一个问题:1000 0000 0000 0000数值是32768超出范围了,你这样输入的时候就是无符号了。
    还有二进制中是不会有2存在的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月16日
  • 已采纳回答 2月14日
  • 创建了问题 2月13日

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算