日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言高级编程:如何确定一个变量是有符号还是无符号数

發(fā)布時(shí)間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言高级编程:如何确定一个变量是有符号还是无符号数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

ANSI C中的整型升級(jí):

1)char,short int或者int型位段(bit-field),包括它們的有符號(hào)或無(wú)符號(hào)變型,

2)以及枚舉類(lèi)型,可以使用在需要int或unsigned int的表達(dá)式中,

3)如果int可以完整地表示源類(lèi)型的所有值,那么該類(lèi)型的值就轉(zhuǎn)換為int,否則轉(zhuǎn)換為unsigned int。

?

ANSI C中的尋常算術(shù)轉(zhuǎn)換:

1)當(dāng)執(zhí)行算術(shù)運(yùn)算時(shí),操作數(shù)的類(lèi)型如果不同,就會(huì)發(fā)生轉(zhuǎn)換。

2)數(shù)據(jù)類(lèi)型一般朝著浮點(diǎn)精度更高、長(zhǎng)度更長(zhǎng)的方向轉(zhuǎn)換,

3)整型數(shù)如果轉(zhuǎn)換為signed不會(huì)丟失信息,就轉(zhuǎn)換為signed,否則就轉(zhuǎn)換為unsigned。

4)這個(gè)稱(chēng)為值保留(value preserving)原則。

?

1. 代碼:

#include <stdio.h>#define IS_UNSIGNED(a) (a >= 0 && ~a >= 0)int main() {signed int a;unsigned int b;signed char c;unsigned char d;printf("a=%d, b=%d\n", IS_UNSIGNED(a), IS_UNSIGNED(b));printf("c=%d, d=%d\n", IS_UNSIGNED(c), IS_UNSIGNED(d)); }

?

2. 運(yùn)行

D:\baoli\Desktop

λ .\a.exe

a=0, b=1

c=0, d=0

?

?

3. 分析

1)對(duì)于int型變量,可以使用

2)對(duì)弈char或short型變量,不適用

無(wú)論原先是否有符號(hào),在~a >= 0中,char和short都被轉(zhuǎn)換成了signed int(整型升級(jí)),然后再進(jìn)行取反。

同時(shí),常數(shù)0被認(rèn)為是int(即signed?int)類(lèi)型,所以一律被判為有符號(hào)數(shù)了。

?

?

4. 改進(jìn)

#define IS_UNSIGNED(a) ((a |= (0x1 << (sizeof(a)*8 - 1))) > 0 ? 1 : 0)

把變量的最高位置1,然后判斷變量是否大于0。如果大于0,就是無(wú)符號(hào)數(shù);否則就是有符號(hào)數(shù)。

?

5. 結(jié)果

D:\baoli\Desktop

λ .\a.exe

a=0, b=1

c=0, d=1

?

總結(jié)

以上是生活随笔為你收集整理的C语言高级编程:如何确定一个变量是有符号还是无符号数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。