最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文弄懂c語言賦值截斷

 更新時間:2025年03月13日 10:19:08   作者:hutaotaotao  
截斷是指將一個較寬范圍的整型賦值給一個較窄范圍的整型時,超出目標類型表示范圍的部分被丟棄,只保留目標類型能夠表示的部分,本文主要介紹了c語言賦值截斷,具有一定的參考價值,感興趣的可以了解一下

截斷含義

在C語言中,將一個較寬范圍的整型(如16位的short或int16_t)賦值給一個較窄范圍的整型(如8位的char或int8_t)時,如果原值超出了目標類型的表示范圍,就會發(fā)生所謂的“截斷”(truncation)。這意味著,超出的部分會被丟棄,只保留目標類型能夠表示的部分。

注意截斷指的是存儲在內(nèi)存中補碼進行截斷。數(shù)值的存儲都是以補碼存儲在內(nèi)存中。

截斷舉例

以無符號16位整型 賦值給 無符號整型8位為例,8位整型的范圍是0-255,16位整型的范圍是0-65536。要看到截斷的效果,可以選擇一個大于255(即8位無符號整型的最大值)但小于65536(16位無符號整型的最大值)的數(shù)。比如uint16_t類型的300賦值給uint8_t類型。選擇300(二進制表示為0000 0001 0010 1100),那么截斷后,將只保留低8位0010 1100,這對應(yīng)于十進制的44。

再比如int16_t的130賦值給int8_t類型。int8_t類型只能表示-128到127之間的整數(shù)。int16_t范圍在-32768到32767。130的二進制補碼表示(在int16_t中)是0000 0000 1000 0010。但是,當將其賦值給int8_t時,只有低8位被保留,即1000 0010。

由于int8_t類型是有符號類型,首位1看作符號位,為負數(shù)。根據(jù)二進制補碼的規(guī)則,要計算這個數(shù)的實際值,需要先取反(不包括最高位)然后加1,可以得到為-126。

更簡單的方法就是忽略符號位(即最高位),剩下的7位是000 0010,這是2的二進制表示。但是,由于整個數(shù)是負數(shù),在二進制補碼系統(tǒng)中,這是通過從-128(1000 0000)開始加上這個正數(shù)來完成的,即-126。此外,如果相加后的值超過了127(int8_t得最大值),可由循環(huán)得到最終的值,比如相加后的值為128那么最終就是-128,因為127的下一個值是-128。

#include <stdio.h>

int main(void)
{
    uint16_t wideVar = 300; // unsigned short
    uint8_t narrowVar = (uint8_t)wideVar; // unsigned char
    printf("%u, %u\n", wideVar, narrowVar); // 300, 44

    int16_t wideVar2 = 130;  // signed short
    int8_t narrowVar2 = (int8_t)wideVar2; // signed char
    printf("%d, %d\n", wideVar2, narrowVar2); // 130, -126

    return 0;
}

到此這篇關(guān)于c語言賦值截斷的實現(xiàn)的文章就介紹到這了,更多相關(guān)c語言賦值截斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評論

惠州市| 满城县| 万州区| 渝北区| 宁乡县| 巴彦县| 比如县| 汤原县| 阿克苏市| 留坝县| 洪湖市| 东丽区| 龙陵县| 贵德县| 交口县| 石首市| 北流市| 和龙市| 新化县| 左贡县| 台东县| 永康市| 宣城市| 井研县| 高邑县| 滦南县| 盘锦市| 微博| 准格尔旗| 瑞安市| 丰城市| 双辽市| 兴隆县| 淳安县| 东丽区| 外汇| 庆阳市| 鹤山市| 泗洪县| 泽州县| 苍溪县|